Dlaczego IE9 przełącza się do trybu zgodności w mojej witrynie?

197

Właśnie zainstalowałem wersję beta IE9 i na konkretnej stronie, którą utworzyłem (HTML5), IE9 przechodzi do trybu zgodności, chyba że ręcznie powiem, żeby tego nie robić. Próbowałem usunąć kilka części witryny, ale bez zmian. W tym usunięcie wszystkich CSS obejmuje. Na innej mojej stronie wszystko idzie dobrze.

Nie ustawiaj go też ręcznie, ponieważ wtedy IE9 zapamiętuje ustawienie użytkownika i nie możesz przywrócić go do trybu automatycznego (a przynajmniej nie znalazłem sposobu, nawet poprzez prywatne przeglądanie i opróżnianie pamięci podręcznej)

Tak czy siak. Witryna, w której przechodzi do trybu zgodności: http://alliancesatwar.com/guide/
Jedna, w której wyświetla się poprawnie: http://geuze.name/basement/ (Nie mogę opublikować więcej niż 1 hiperłącza)

Oba używają tego samego doctypei wszystkich. Strony te mają wiele wspólnego (oprócz wyglądu) przy użyciu tego samego podstawowego szablonu (kodowanie, metatagi, doctype i ten sam javascript)

Byłoby wspaniale, gdyby ktoś miał dla mnie odpowiedź! Witryna HTML5 wyświetlająca się w trybie IE7 jest dość ... kiepska.

René
źródło
5
Proszę wyjaśnić „wskakuje do trybu zgodności”? Jeśli zobaczysz odświeżenie strony i dymek z informacją, że IE odświeżył tę stronę w widoku zgodności z powodu problemu, oznacza to, że znalazłeś błąd IE o nazwie „hard assert”, który jest podobny do awarii silnika renderującego . Jesteśmy zainteresowani ich znalezieniem i naprawieniem; zgłoś błąd na connect.microsoft.com/ie . Dzięki!
EricLaw

Odpowiedzi:

263

Działa dla mnie w IE9 documentMode.

Bez X-UA-Compatiblenagłówka / meta, aby ustawić jawny tryb dokumentu, otrzymasz tryb oparty na:

  • czy użytkownik kliknął wcześniej przycisk „widok zgodności” w tej domenie;
  • być może także, czy stało się to automatycznie z powodu jakiejś innej zawartości na stronie, powodującej awarię renderera IE8 / 9 i powrót do starego renderera;
  • czy użytkownik zdecydował się domyślnie umieścić wszystkie witryny w widoku zgodności;
  • czy IE myśli, że strona znajduje się w twoim intranecie, a więc domyślnie wyświetla widok zgodności;
  • czy dana witryna znajduje się na własnej liście witryn Microsoft, które wymagają widoku zgodności.

Możesz zmienić te ustawienia z „Narzędzia -> Ustawienia widoku zgodności” z menu IE. Oczywiście to menu jest teraz podstępnie ukryte, więc nie zobaczysz go, dopóki nie naciśniesz Alt.

Jako autor witryny, jeśli masz pewność, że Twoja witryna jest zgodna ze standardami (dobrze renderuje się w innych przeglądarkach i używa funkcji wąchania funkcji, aby zdecydować, które obejścia przeglądarki należy użyć), sugeruję użycie:

<meta http-equiv="X-UA-Compatible" content="IE=Edge"/>

lub nagłówek HTTP:

X-UA-Compatible: IE=Edge

aby uzyskać najnowszy renderer, niezależnie od używanej wersji IE.

Bobin
źródło
79
Ważna uwaga: jeśli IE 9 jest skonfigurowany tak, aby zawsze wyświetlał witryny intranetowe w trybie zgodności, ani metatag ani nagłówek HTTP nie zastąpią tego.
Jakub
29
Jak wspomina Jacob, IE może domyślnie wyświetlać wszystkie strony lokalne / intranetowe w trybie zgodności. Naciśnij alt -> Narzędzia Zgodność Wyświetl ustawienia i upewnij się, że pole nie jest zaznaczone.
Cory Mawhorter,
30
Metatag działał dla mnie tylko wtedy, gdy wstawiłem go zaraz po <head> (patrz także odpowiedź poniżej). Kiedy umieściłem go dalej w elemencie <head>, nie zadziałało (wciąż mam rozdartą stronę).
Boris van Schooten
13
@Jacob: To trochę mylące. Tak, będziesz w trybie przeglądarki i nie ma wyjścia. Ale nadal możesz użyć nagłówka HTTP, aby ustawić tryb dokumentu, w którym każda wersja IE działa najlepiej dla Twojej witryny. IE = Edge powinien zawsze zapewniać najnowszy silnik renderujący. Nawet jeśli jesteś technicznie w trybie zgodności, możesz renderować swoje strony tak, jakby były w trybie normalnym. Popraw mnie, jeśli się mylę, ale przynajmniej nasza strona intranetowa działa dokładnie tak (nawet przy zaznaczonym ustawieniu „Wyświetlaj strony intranetowe w widoku zgodności”).
mkataja
7
@ BorisvanSchooten: Nie wiem, czy to jest powód, ale <meta>tagi muszą znajdować się w pierwszych 512 bajtach przetworzonego pliku HTML. Mówię „przetworzone”, ponieważ możesz tam mieć wszystkie rodzaje PHP, ale ważny jest renderowany kod. Dotarłem do miejsca, w którym umieściłem wszystkie moje komentarze <meta>poniżej <meta>tagów, aby nie złamać tego wymagania.
doubleJ
33

włożyłem

<meta http-equiv="X-UA-Compatible" content="IE=Edge"/>

pierwsza rzecz po

<head>

(Gdzieś to przeczytałem, nie pamiętam)

Nie mogłem uwierzyć, że to zadziałało !!

pkario
źródło
Musisz zamknąć kartę i otworzyć nową kartę, próbowałeś tego?
Zeb
1
Powiedział „nie” nie „nie”;)
Nathan JB
14
+1, to bardzo cenna nuta . Jeśli masz w <script>środku <head>przed tą metainstrukcją, to (IE = edge) zostanie zignorowane.
jakub.g
22

Aby zmusić IE do renderowania w trybie standardów IE9, powinieneś użyć

<meta http-equiv="X-UA-Compatible" content="IE=edge">

Niektóre warunki mogą spowodować, że IE9 przejdzie w tryb zgodności. Domyślnie może się to zdarzyć w witrynach intranetowych.

Delan Azabani
źródło
Działa na innej stronie internetowej. To nie powinno tak być. Ponadto ten metatag jest zły, ponieważ trzeba go ręcznie aktualizować za każdym razem, gdy pojawi się nowa wersja IE.
René,
2
Przepraszam, nie mogę rozwiązać twojego problemu. Jednak IE=edgezamiast tego zredagowałem swoją odpowiedź, aby zawsze korzystać z najnowszego dostępnego silnika.
Delan Azabani,
Twoje założenie jest nieprawidłowe. Dema określają zgodność z X-UA, aby uniemożliwić IE wyświetlanie przycisku widoku zgodności, ponieważ jeśli użytkownik go popchnie, zawartość witryny nie będzie działać poprawnie.
EricLaw
@ReneGeuze, źle zrozumiałeś. Edge zawsze odnosi się do najnowszej wersji IE.
neoswf
@DelanAzabani mój portal intranetowy przechodzi w tryb zgodności, nawet dodałem metatag, jak sugerowałeś. proszę zasugerować, jak można to rozwiązać i pozostać na przykładzie trybu standardowego - kompatybilność IE 8, IE 8, a następnie chcę tylko IE 8.
dsi
6

Zamieściłem ten komentarz w osobnym wątku StackOverflow, ale pomyślałem, że warto tutaj powtórzyć:

W przypadku naszej wewnętrznej aplikacji ASP.Net dodanie znacznika „X-UA-Compatible” na stronie internetowej, w pliku web.config lub w kodzie nie miało absolutnie żadnej różnicy.

Tylko rzeczą, która pracowała dla nas było, aby ręcznie wyłączyć to ustawienie w IE8:

wprowadź opis zdjęcia tutaj

(Westchnienie.)

Wydaje się, że ten problem występuje tylko w przypadku IE8 i IE9 w witrynach intranetowych. Witryny zewnętrzne będą działać poprawnie i będą używać poprawnej wersji IE8 / 9, ale w przypadku witryn wewnętrznych IE9 nagle decyduje, że to właściwie IE7 i nie ma żadnej obsługi HTML 5.

Nie, do końca nie rozumiem tej logiki.

Moim niechętnym rozwiązaniem było przetestowanie, czy przeglądarka obsługuje HTML 5 (poprzez utworzenie obszaru roboczego i sprawdzenie, czy jest poprawny) i wyświetlenie tej wiadomości użytkownikowi, jeśli nie jest poprawna:

wprowadź opis zdjęcia tutaj

Nie jest to szczególnie przyjazne dla użytkownika, ale skłonienie użytkownika do wyłączenia tego irytującego ustawienia wydaje się być jedynym sposobem na prawidłowe działanie wewnętrznych aplikacji HTML 5.

Lub zachęć użytkowników do korzystania z Chrome. ;-)

Mike Gledhill
źródło
1

Witryna pod adresem http://www.HTML-5.com/index.html ma metatag zgodny z X-UA, ale nadal przechodzi do Widoku zgodności, jak wskazuje ikona „podarta strona” na pasku adresu. Jak uzyskać opcję menu, aby zmusić IE 9 (wersja ostateczna 9.0.8112.16421) do renderowania strony w trybie normalnym? Próbowałem kliknąć prawym przyciskiem myszy ikonę rozdartej strony, a także sztuczkę „Alt”, aby wyświetlić dodatkowe opcje menu wspomniane przez Rene Geuze, ale te nie działały.

Rob w TVSeries.com
źródło
4
Usuń komentarz warunkowy IE wokół meta. Podajesz stronę jako application/xhtml+xml, więc używane są reguły analizy XML; XML nie obsługuje komentarzy warunkowych. W każdym razie nie ma to sensu; przeglądarka musi wybrać tryb, zanim będzie mogła zdecydować, jakie komentarze warunkowe interpretować.
bobince
1

Na marginesie w bardziej nowoczesnych witrynach internetowych, jeśli używasz instrukcji warunkowych w tagu html zgodnie z szablonem, z jakiegoś powodu spowoduje to, że ie9 przejdzie w tryb zgodności. Rozwiązaniem jest przeniesienie instrukcji warunkowych z tagu html i dodanie ich do tagu body, innymi słowy poza sekcję head. W ten sposób możesz nadal używać tych klas w arkuszu stylów do kierowania na starsze przeglądarki.

uknowit2
źródło
0

Wygląda mi dobrze:

alternatywny tekst

Jesteś pewien, że nie ustawiłeś globalnie ustawień czy coś takiego? Jest to czysta instalacja wersji beta w systemie Windows 7. Narzędzia programistyczne zgłaszają, że strona domyślnie pracuje w trybie standardowym IE9.

Yi Jiang
źródło
Miałem więcej niż 1 raport o tym błędzie. Chociaż może ma to związek z podstawowym katalogiem ( alliancesatwar.com ), który renderuje wszystkie podkatalogi również w trybie zgodności. Ale mam pytanie, co w katalogu głównym witryny powoduje, że IE renderuje witrynę w trybie zgodności? Więc może przynajmniej ten przewodnik jest dobrze zakodowany. Mam nadzieję, że tak.
René,
@Rene Strange, właśnie go odtworzyłem, klikając link Przewodnik na stronie głównej. Ale stało się to tylko raz i po kilku próbach muszę to jeszcze odtworzyć, tylko raz
Yi Jiang
0

Niedawno musiałem rozwiązać ten problem i oto, co zrobiłem:

Przede wszystkim dotyczy to dostrajania serwera Apache.

Druga główna myśl to błąd w IE9, co oznacza, że ​​metatag nie będzie działał, zamiast tego rozwiązania spróbuj tego

  • znajdź / otwórz swój httpd.conf
  • odkomentuj / lub dodaj następujący wiersz

    LoadModule headers_module modules/mod_headers.so
  • dodaj następujące wiersze

    <IfModule headers_module>
        Header set X-UA-Compatible: IE=EmulateIE8
    </IfModule>
  • zapisz / uruchom ponownie serwer Apache,

  • przejdź do swojej strony za pomocą IE9, użyj narzędzi takich jak wireshark lub skrzypek lub użyj narzędzi programistycznych IE, aby sprawdzić, czy nagłówek tam jest
Abderrazak BOUADMA
źródło