SORU
1 Temmuz 2011, Cuma


Ne kadar zorla IE'nin Uyumluluk Modu sunucu tarafı kapalı ayarlanır?

Etki-kontrollü bir ortamda uyumluluk modu X-UA etiketler, bir bir veriyor hatta bazı istemciler (/Windows 7, IE8/9 Vista) tetiklenen buluyorum !Tanımı ve "=" yanıt başlıkları. Edge YANİ DOCTYPE Bu istemciler "Uyumluluk Görünümü intranet siteleri" onay kutusu işaretli. görüntü var Hangi geçersiz kılmak için çalıştığım şey tam da budur.

Aşağıdaki YANİ aslında uyumluluk modunu tetiklemek için karar nasıl anlamak denemek için kullandım o belgelere.

http://msdn.microsoft.com/en-us/library/ff406036(v=VS.85).aspx

http://blogs.msdn.com/b/ie/archive/2009/02/16/just-the-facts-recap-of-compatibility-view.aspx

Site sahipleriher zamaniçeriklerini kontrol.Site sahipleri X-UA Uyumlu etiket göster Standartlarına görüntülemek için kendi sitesi gibi ve 7 Standartlarına modu sayfa açmanın nasıl olduğu hakkında hiçbir açıklayıcı olması için kullanabilirler.İstemci üzerinde X-UA Uyumlu etiketi geçersiz kılar Uyumluluk Görünümünü kullanın.

Google"Tanımlama Belgesi Uyumluluk"SPAM motoru bana 2 den fazla URL sonrası izin vermiyor , ne yazık ki.

Bu ASP .NET bir web uygulaması olduğunu ve ana sayfada aşağıdaki tanımları içerir:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<head>
   <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
</head>

ve 6**

<system.webServer>
  <httpProtocol>
    <customHeaders>
      <clear />
      <add name="X-UA-Compatible" value="IE=Edge" />
    </customHeaders>
  </httpProtocol>
</system.webServer>

Fiddler Başlığı gerçekten doğru enjekte ediliyor kontrol etmek için kullandım.

Benim anladığım bu ayarlar ile "Uyumluluk Görünümü intranet siteleri" ayarları. Görüntü geçersiz kılmak gerekir ki Ama müşteriye bağlı olarak bazıları hala uyumluluk modunu tetikleyecek buldum. Ayrıca farklı istemcileri aynı kimlik bilgileri kümesi ile kullanıyorum bile farklı sonuçlar elde beri makine seviyeye politikası iyi değil gibi görünüyor.

Uyumluluk Görünümü Ayarları onay kutusunu devre dışı bırakmak işe yarıyor. Ama asıl amaç bu app tam olarak aynı şekilde ne olursa olsun istemci ayarları işlenir emin olmaktır.

Muhtemelen eksik olabilir ne herhangi bir düşünce? Mümkünse her zaman IE Uyumluluğu modu tetikleme olmadan sayfaları işlemek için zorlamak mı?

teşekkürler bir milyon

Jaume

PS:site şu anda geliştirme ve Microsoft uyumluluk listesinde değil tabii ki, ama aynı zamanda her ihtimale karşı kontrol ettim.

Google"" . Anlayış Uyumluluk Görünümü Listesi SPAM motoru bana 2 den fazla URL sonrası izin vermiyor , ne yazık ki.

CEVAP
21 Mayıs 2013, Salı


Bunu yapmanın iki yaygın yolu ile ilgili sorunlar bulundu:

  1. Özel üstbilgi (<customHeaders>) web ile bunu yapıyor.config aynı uygulama farklı dağıtımları bu farklı olmasını sağlar. Eğer uygulama kodu bu belirtirse daha iyi olur bence bu kadar ters gidebilir, daha fazla bir şey olarak görüyorum. Ayrıca, IIS6 doesn't support this.

  2. Web Formları Ana Sayfa <meta> bir HTML etiketi veya MVC Sayfa Düzeni de dahil olmak üzere yukarıda daha iyi görünüyor. Eğer bazı sayfaları bu etiketi çoğaltılmış olması gerekir sonra miras yok eğer doğru değilse ancak, sürdürülebilirlik ve güvenilirlik potansiyel bir sorun var.

  3. Ağ trafiğini sadece Internet Explorer istemcileri için X-UA-Compatible Başlığı göndererek azaltılabilir.

İyi Yapılandırılmış Bir Uygulama

Eğer uygulama tüm sayfaları sonuçta miras tek bir kök sayfasından neden olan bir yapıya sahiptir, the other answers gösterildiği gibi <meta> etiketi vardır.

Eski Uygulamalar

Aksi takdirde, Bunu yapmak için en iyi yolu otomatik olarak tüm HTML yanıtları için HTTP başlık eklemek için olduğunu düşünüyorum. One way to do this IHttpModule: bir kullanıyor

public class IeCompatibilityModeDisabler : IHttpModule
{
    public void Init(HttpApplication context)
    {
        context.PreSendRequestHeaders  = (sender, e) => DisableCompatibilityModeIfApplicable();
    }

    private void DisableCompatibilityModeIfApplicable()
    {
        if (IsIe && IsPage)
            DisableCompatibilityMode();
    }

    private void DisableCompatibilityMode()
    {
        var response = Context.Response;
        response.AddHeader("X-UA-Compatible", "IE=edge");
    }

    private bool IsIe { get { return Context.Request.Browser.IsBrowser("IE"); } }

    private bool IsPage { get { return Context.Handler is Page; } }

    private HttpContext Context { get { return HttpContext.Current; } }

    public void Dispose() { }
}

IE=edge IE en son kendi render motoru (uyumluluk modu yerine) sayfa işlemek için kullanması gerektiğini gösterir.

HTTP modülleri genellikle web kayıtlı görünüyor.yapılandırma dosyası, ama bu ilk soruna geri dönüyoruz. Ancak bu gibi you can register them programmatically in Global.asax:

public class Global : HttpApplication
{
    private static IeCompatibilityModeDisabler module;

    void Application_Start(object sender, EventArgs e)
    {
        module = new IeCompatibilityModeDisabler();
    }

    public override void Init()
    {
        base.Init();
        module.Init(this);
    }
}

Uygulama başına yalnızca bir örneği yok ki Init modülü static örneği çok önemli olduğunu unutmayın. Gerçek dünya uygulamasında elbette, IoC konteynerine muhtemelen bu yönetmek olmalıdır.

Avantajları

  • Sorunlar bu cevap başında özetlenen üstesinden gelir.

Dezavantajları

  • Web sitesi yöneticileri üstbilgi değeri üzerinde kontrol yok. Bu, Internet Explorer için yeni bir sürüm çıkar ve olumsuz bir web sitesi oluşturma etkiler eğer bir sorun olabilir. Ancak, bu modülü kodlanmış bir değer kullanmak yerine uygulama yapılandırma dosyası üstbilgi değeri okumak zorunda tarafından üstesinden olabilir.
  • Bu değişiklik ASP.NET MVC ile çalışmak gerekebilir.
  • Bu statik HTML sayfaları için çalışmıyor.
  • Yukarıdaki kodu PreSendRequestHeaders olay IIS6 yangın gibi görünmüyor. Bu hatayı gidermek için nasıl henüz çözemedim.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Adam Outler

    Adam Outler

    19 EKİM 2006
  • EmbarkToHeaven

    EmbarkToHeav

    3 EYLÜL 2007
  • sWooZie

    sWooZie

    9 ŞUBAT 2006