IE10 renderuje się w trybie IE7. Jak wymusić tryb standardów?

Odpowiedzi:

244

Internet Explorer przyjmuje założenie, że większość stron internetowych została napisana z myślą o wcześniejszych wersjach IE i sprawdza typ dokumentu, metatagi i HTML, aby określić najlepszy tryb zgodności (czasami nieprawidłowo). Nawet z dokumentem HTML5 IE nadal będzie umieszczać Twoją witrynę w trybie zgodności, jeśli jest to witryna intranetowa.

Aby upewnić się, że Twoja witryna internetowa zawsze korzysta z trybu najnowszych standardów, możesz albo upewnić się, że Display intranet sites in Compatiblyjest wyłączony. Jednak musisz to zrobić na każdym komputerze lokalnie na serwerze WWW (instrukcje znajdują się poniżej).

Alternatywnie, jeszcze lepiej, możesz użyć X-UA-Compatiblenagłówka, aby wyłączyć to z serwera. Należy pamiętać, że użycie metatagu nie zadziała!

<!-- Doesn't always work! -->
<meta http-equiv="X-UA-Compatible" content="IE=edge" />

W całej witrynie MSDN wspomina się, że użycie nagłówka hosta lub metatagu powinno zastąpić nawet witryny intranetowe. Artykuł Zrozumienie trybów zgodności w programie Internet Explorer 8 mówi, co następuje.

Wiele wewnętrznych firmowych witryn sieci Web jest zoptymalizowanych pod kątem programu Internet Explorer 7, więc ten domyślny wyjątek zachowuje tę zgodność. ... Ponownie, jeśli tag Meta lub nagłówek http jest używany do ustawienia trybu zgodności dokumentu, nadpisze te ustawienia.

Jednak w praktyce to nie zadziała, użycie nagłówka hosta jest jedyną działającą opcją. Sekcja komentarzy w artykule zawiera również liczne przykłady tego konkretnego problemu.

Korzystanie z metatagu wiąże się również z kilkoma innymi problemami, takimi jak ignorowanie tagu, jeśli nie znajduje się bezpośrednio pod <head>tagiem lub jeśli przed nim jest zbyt dużo danych (4k). Może również spowodować ponowne przeanalizowanie dokumentu w niektórych wersjach IE, co spowolni renderowanie. Więcej informacji na temat tych problemów można znaleźć w artykule MSDN Najlepsza praktyka: uporządkuj HEAD .

Dodanie nagłówka zgodnego z X-UA

Jeśli używasz .NET i IIS, możesz dodać to do web.config, możesz również zrobić to programowo:

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

Jeśli nie używasz usług IIS, możesz to łatwo zrobić w dowolnym języku. Na przykład, oto jak to zrobić w PHP:

header('X-UA-Compatible: IE=edge');

Dopóki X-UA-Compatiblenagłówek będzie obecny w formacie dokumentu HTML5, witryna będzie zawsze działać w trybie najnowszych standardów.

Wyłączanie widoku zgodności Wyłączenie widoku zgodności
może być nadal przydatne. Aby to zrobić, odznacz Display all intranet sites in compatibility vieww Ustawieniach widoku zgodności.

Ustawienia widoku zgodności

Możesz to wywołać, naciskając, Altaby uzyskać menu.

wprowadź opis obrazu tutaj

Edytuj Ta odpowiedź dotyczy również IE9.

Daniel Little
źródło
Przepraszam za moją ignorancję, ale jak dostać się do tego arkusza ustawień? Sprawdziłem ustawienia Internet Explorera, prawym przyciskiem myszy kliknąłem widok zgodności w pasku adresu - nic.
firedev
2
@Nick użyj, altaby wywołać pasek narzędzi, jest pod narzędziami -> ustawienia widoku kompatybilności
Daniel Little
Och, dziękuję, wygląda na to, że to rozwiązało. Można się zastanawiać, dlaczego w ogóle to zrobili.
firedev
25
+1000;). SO powinien zmusić każdy OP do zobaczenia tej odpowiedzi, gdy ma w swoim pytaniu tag [IE] i słowo „zgodny”, nawet zanim faktycznie opublikuje to pytanie.
Teemu
2
Próbowałem dodać sekcję niestandardowych nagłówków do pliku web.config projektu. Wydawałoby się, że ustawienie nie zastępuje ustawienia IE do korzystania z widoku zgodności dla witryn intranetowych.
DomenicDatti
25

To działa dla mnie ...

<meta http-equiv="X-UA-Compatible" content="IE=edge" />
JGilmartin
źródło
11
Uwaga, jak powiedział Lavinski powyżej, „metatag nie działa w przypadku witryn intranetowych”.
Nathan
2
Co jest warte, w przypadku hostowanej witryny internetowej (witryny innej niż intranet), która ma X-UA-Compatiblemetatag, ale nadal nie uruchamia trybu dokumentu Standardów IE10 jako domyślnej strony, stwierdziłem, że jeśli metatag znajduje się poniżej tagów skryptu lub jest po prostu zbyt daleko od wierzchołka <head>drzewa DOM, IE10 krzyczy i ustawia tryb dokumentu na Standardy IE8. Więc trzymaj swój IE=edgemetatag blisko <title>tagu. Nie zawsze jest to prosta poprawka dla witryn Wordpress, gdy nie jest to na stałe zakodowane w pliku szablonu nagłówka. Nie jestem pewien, czy IE11 dba o to, gdzie jest metatag, ale mam nadzieję, że okaże się to pomocne dla kogoś.
purefusion
1
W przypadku ślepych kopii i pastorów, takich jak ja, brakuje tagu zamykającego. . <meta http-equiv = "X-UA-Compatible" content = "IE = edge"> </meta>
John Newman,
Musisz zamknąć metatag tylko, jeśli używasz typu dokumentu XHTML
Andy Brudtkuhl
2
Również ten tag musi być pierwszym tagiem wewnątrz <head>
Chris Gunawardena,
10

Spróbuj dodać następujący tag do głowy

<meta http-equiv="X-UA-Compatible" content="IE=11,IE=10,IE=9,IE=8" />
Jeow Li Huan
źródło
5
To powinno być IE=Edgezamiast tego
Daniel Little
1
Ale istnieje ryzyko, że przyszłe wersje IE
zrobią
7
Nie, to nie jest ryzyko, jeśli będziesz postępować zgodnie ze specyfikacją, nie widzisz ludzi, którzy robią to dla Chrome.
Daniel Little
1
Ten tag musi być pierwszym tagiem wewnątrz <head>
Chris Gunawardena,
1
Zmiana w tej odpowiedzi pokazuje, dlaczego nie jest to dobry pomysł. Przyjęta odpowiedź jest najlepszym rozwiązaniem.
David Granado,
2

Metatag nie robi nic w przypadku witryn intranetowych, a moim problemem było renderowanie IE10 w trybie zgodności IE10. To, co rozwiązało ten problem, to poszerzenie odpowiedzi @ Jeow i użycie tej wartości w nagłówku http przez dodanie następującego elementu w web.configobszarze IIS:

<system.webServer>
  <httpProtocol> 
    <customHeaders> 
      <clear />
      <!-- <add name="X-UA-Compatible" value="IE=edge" /> not good enough -->
      <add name="X-UA-Compatible" value="IE=11,IE=10,IE=9,IE=8" /> 
    </customHeaders> 
  </httpProtocol>
</system.webServer>

Dla celów IE, witryny intranetowe obejmują publiczne witryny, które nie są kierowane na zewnątrz - na przykład pracownik Stackoverflow pracujący w biurze prawdopodobnie zobaczyłby stackoverflow.com w trybie zgodności.

ov
źródło
1

U mnie zadziałało idealnie, gdy wykonałem następujące czynności:

Na http://msdn.microsoft.com/en-us/library/gg699338(v=vs.85).aspx

</html>Użyłem dokładnego przykładu, który podają w pierwszym pudełku (dodałem brakujący na dole), otworzyłem go w IE10 i standardy zostały wymuszone, myślę, że możesz potrzebować rzeczywistej treści w html, aby wymusić standardy, chociaż nie jestem pewien.

Moją sugestią byłoby zastąpienie pustego kodu rzeczywistą treścią (coś prostego) i zobaczenie, co robi.

ZacNespral21
źródło