Wymuś wyłączenie trybu zgodności IE za pomocą znaczników

375

Pracuję dla klienta, który wymusza tryb zgodności na wszystkich stronach intranetowych. Zastanawiałem się, czy istnieje jakiś tag, który mogę umieścić w swoim HTML, który wymusza wyłączenie trybu zgodności.

Al Katawazi
źródło
Myślę, że odpowiedź, której szukasz, znajduje się tutaj: stackoverflow.com/questions/1014666/...
Gabriel,
45
Właściwie szukałem dokładnie przeciwnego, który ustawia swój standard na tryb zgodności, to po prostu szalone.
Al Katawazi,
12
Zły javascript w starszej aplikacji, która zawiesza się na czymkolwiek innym niż IE7, co ustawia ich standard na zgodność. Pewnego dnia zajmiemy się jego wymianą ...
pete pogański-gerbil
1
@ petethepagan-gerbil, czy udało ci się go wymienić? : P
icedwater
1
@icedwater Opuściłem firmę ponad 6 lat temu :) Wprowadziliśmy niewielkie ulepszenia, aby usunąć problemy, ilekroć mieliśmy zmiany w tym samym obszarze, ale dług technologiczny nigdy nie był tam traktowany priorytetowo. Nie wiem, czy to się w końcu naprawiło.
pete the pagan-gerbil

Odpowiedzi:

535

Istnieje tryb „krawędzi” .

<html>
   <head>
      <meta http-equiv="X-UA-Compatible" content="IE=edge" />
      <title>My Web Page</title>
   </head>
   <body>
      <p>Content goes here.</p>
   </body>
</html>

Z połączonej strony MSDN:

Tryb krawędzi informuje program Windows Internet Explorer, aby wyświetlał zawartość w najwyższym dostępnym trybie, co faktycznie łamie paradygmat „blokowania”. W przypadku przeglądarki Internet Explorer 8 jest to odpowiednik trybu IE8. Jeśli (hipotetyczne) przyszłe wydanie Internet Explorera obsługuje tryb wyższej zgodności, strony ustawione na tryb Edge pojawią się w trybie najwyższym obsługiwanym przez tę wersję; jednak te same strony nadal pojawiałyby się w trybie IE8 podczas przeglądania w Internet Explorerze 8.

Jednak tryb „krawędzi” nie jest zalecany w zastosowaniach produkcyjnych:

Zaleca się, aby programiści WWW ograniczyli korzystanie z trybu Edge do testowania stron i innych zastosowań nieprodukcyjnych ze względu na możliwe nieoczekiwane wyniki renderowania zawartości stron w przyszłych wersjach programu Windows Internet Explorer.

Naprawdę nie do końca rozumiem dlaczego. Ale zgodnie z tym najlepszym sposobem, aby przejść w tej chwili, jest skorzystanie IE=8.

Pekka
źródło
7
Począwszy od 8/6/2012 Microsoft wydaje się używać IE=10w swoich witrynach. Jeśli Twoja witryna została przetestowana w IE10 (wersja zapoznawcza), możesz z niej bezpiecznie korzystać; w przeciwnym razie możesz trzymać się tego IE=9na razie.
calvinf,
75
Przekonałem się, że to NIE działa, jeśli użytkownik (lub sysadmin) włączył tryb zgodności domyślnie, przechodząc do Tools->Compatibility View Settingsi zaznaczając opcję Wyświetl wszystkie strony internetowe w widoku zgodności. Aby rozwiązać problem, muszę zwrócić nagłówek w odpowiedzi HTTP:X-UA-Compatible: IE=edge
Speedplane
10
+1 do Speedplane - tryb zgodności IE10 jest domyślnie WŁĄCZONY dla stron intranetowych - UGH ... dzięki za znalezienie!
viperguynaz
132
Słowo rady dla tych, którzy znajdą tę odpowiedź, ale nie są w stanie jej uzyskać. Metatag zgodności MUSI być pierwszym metatagiem, a przed tagiem nie mogą znajdować się żadne instrukcje warunkowe IE. Więcej informacji: tesmond.blogspot.com/2011/10/...
Chris Sobolewski
2
Dziękuję Chris! Walczyłem z tym przez 30 minut, kiedy w końcu przeczytałem twój komentarz. Nie miałem tego pierwszy.
Hawkee
91

Po wielu godzinach rozwiązywania problemów z tymi rzeczami ... Oto kilka najważniejszych informacji, które pomogły nam w X-UA-Compatibledokumentacji: http://msdn.microsoft.com/en-us/library/cc288325(VS.85).aspx#ctl00_contentContainer_ctl16

Za pomocą <meta http-equiv="X-UA-Compatible" content=" _______ " />

  • W standardowym środkiem użytkownika tryby (nie-naśladować nich) ignorować <!DOCTYPE>dyrektyw w swoją stronę i uczynić na podstawie standardów obsługiwanych przez tę wersję IE (np IE=8będzie lepiej Obey rozstaw stół granicznej i niektóre pseudo niż selektorów IE=7).

  • Podczas gdy tryby emulacji mówią IE, aby postępował zgodnie z dowolnymi <!DOCTYPE>dyrektywami na stronie, tryb renderowania standardów oparty jest na wybranej przez ciebie wersji, a tryb dziwactwa oparty naIE=5

  • Możliwe wartości tego contentatrybutu to:

    content="IE=5"

    content="IE=7"

    content="IE=EmulateIE7"

    content="IE=8"

    content="IE=EmulateIE8"

    content="IE=9"

    content="IE=EmulateIE9"

    content="IE=edge"

brandonjp
źródło
67

Jeśli pracujesz ze stroną w strefie intranetowej, może się okazać, że IE9 bez względu na to, co robisz, przechodzi w tryb kompilacji IE7.

Wynika to z ustawienia w ustawieniach zgodności IE, które mówi, że wszystkie strony intranetowe powinny działać w trybie zgodności. Możesz to odznaczyć za pomocą zasad grupy (lub po prostu odznaczając to w IE), lub możesz ustawić następujące ustawienia:

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

Działa to (jak wyszczególniono w innych odpowiedziach), ale początkowo może się tak nie wydawać: musi pojawić się przed zadeklarowaniem arkuszy stylów . Jeśli tego nie zrobisz, zostanie to zignorowane.

Amadiere
źródło
3
dzięki za ostrzeżenie o arkuszu stylów, powodowało to problemy i teraz znam przyczynę!
eMRe
Tak, początkowo napadnięci przez umieszczenie. Dzięki za dodanie tego.
John Moylan
Dzięki, że to było bardzo pomocne. Mają obiekt zasad grupy, który ustawia efektywny poziom IE na 7, nawet jeśli IE 11 jest zainstalowany. To uratowało mnie od konieczności umieszczania kilku podkładek w witrynie, aby zmusić js do pracy.
Charles Owen
28

Wierzę, że to załatwi sprawę:

<meta http-equiv="X-UA-Compatible" content="IE=edge" />
Peter Ruderman
źródło
28

Jak zasugerowano w tej odpowiedzi na powiązane pytanie, tryb „krawędzi” można ustawić w pliku Web.Config. Spowoduje to, że będzie on mieć zastosowanie do całego kodu HTML zwróconego z aplikacji bez konieczności wstawiania go do poszczególnych stron:

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

Ten sam krok można również wykonać, modyfikując „Nagłówki odpowiedzi HTTP” za pomocą Menedżera usług IIS dla serwera IIS, całej witryny lub określonych aplikacji.

Erik Anderson
źródło
19

Rozwiązanie dla metatagu nie działało dla nas, ale ustawienie go w nagłówku odpowiedzi spowodowało:

header('X-UA-Compatible: IE=edge,chrome=1');
Lance Anderson
źródło
3
+1 dla „chrome = 1”; Nigdy o tym nie wiedziałem. Jeśli chodzi o to, co warto, zmiana na IE = 10 rozwiązała wiele problemów z renderowaniem w mojej witrynie, na które IE = edge nie miało wpływu.
Objaśnienie chrome=1właściwości, stackoverflow.com/a/22059516/368691 . Pamiętaj, że Chrome Frame został wycofany. blog.chromium.org/2013/06/retiring-chrome-frame.html
Gajus
1
zobacz komentarze do innych odpowiedzi ... Przekonałem się, że to NIE działa, jeśli użytkownik (lub sysadmin) domyślnie włączył tryb zgodności, przechodząc do Narzędzia-> Ustawienia widoku zgodności i zaznaczając Wyświetl wszystkie strony internetowe w widoku zgodności . speedplane 19.04.13 kwietnia o 11:29 7 Metatag zgodności MUSI być pierwszym metatagiem, a przed tagiem nie mogą znajdować się żadne warunkowe instrukcje IE. Więcej informacji: tesmond.blogspot.com/2011/10/… - Chris Sobolewski 19 sierpnia o 20:23
felickz
Próbowałem umieścić go w pierwszym wierszu na stronie układu. To nie działa, Stu wspomniał o zmianie nagłówków odpowiedzi HTTP IIS. Próbowałem. Zrestartowałem pulę aplikacji. Sprawdzam więcej. Ta strona jest zagnieżdżona pod inną stroną. Na drugiej stronie jest inna meta. To jest strona produkcyjna. Tak wiele osób ma dostęp do tej strony. umieszczenie tego tagu na górze jest niemożliwe. Każde inne rozwiązanie lub jestem
cholerny
10

Jeszcze kilka notatek na ten temat w oparciu o moje ostatnie doświadczenia. Uczelnia, w której pracuję, wydaje problemy z laptopami z IE 8 ustawionym w tryb zgodności dla wszystkich witryn intranetowych. Próbowałem dodać metatag, aby wyłączyć ten tryb dla stron obsługiwanych przez moją witrynę, ale IE konsekwentnie zignorował ten tag. Jak wspomniał Lance w swoim poście, dodanie nagłówka odpowiedzi naprawiło ten problem. Oto jak ustawiłem nagłówek na podstawie metody HTML5:

<IfModule mod_headers.c>
  Header set X-UA-Compatible "IE=edge,chrome=1"
  # mod_headers can't match by content-type, but we don't want to send this header on *everything*...
  <FilesMatch "\.(appcache|crx|css|eot|gif|htc|ico|jpe?g|js|m4a|m4v|manifest|mp4|oex|oga|ogg|ogv|otf|pdf|png|safariextz|svg|svgz|ttf|vcf|webm|webp|woff|xml|xpi)$">
    Header unset X-UA-Compatible
  </FilesMatch>
</IfModule>

Aby ten nagłówek został faktycznie wysłany, musisz upewnić się, że masz włączone mod_headers w Apache. Jeśli chcesz się upewnić, że masz włączony ten mod, umieść to na stronie, na której można uruchomić php:

<pre>
<?php
    print_r(apache_get_modules());
?>
</pre>
Cloudkiller
źródło
Metoda .htaccess zadziałała dla mnie w IE8 + Usunęła przycisk zgodności (alias Enemy nr 1) i zmusiła IE8 do unikania używania trybu zgodności. Powiązane: Alternatywna metatag wydaje się działać tylko pod pewnymi warunkami (IE Voodoo) na różnych komputerach.
William Isted,
10

IE8 domyślnie pracuje w trybie standardowym dla sieci intERnet i trybie dziwactw dla sieci intRAnet. Metatag HTML jest ignorowany, jeśli masz ustawiony doctype jako przejściowy xhtml. Rozwiązaniem jest dodanie nagłówka HTTP w kodzie. To działało dla nas. Teraz nasza strona intranetowa zmusza IE8 do renderowania aplikacji w trybie standardów.

Dodano do PageInit podstawowej klasy strony (ASP.net C #):

Response.AddHeader("X-UA-Compatible", "IE=EmulateIE8");

odnośnik: http://ilia.ws/archives/196-IE8-X-UA-Compatible-Rant.html

rswank
źródło
3

Wynika to z ustawienia w ustawieniach zgodności IE, które mówi, że wszystkie strony intranetowe powinny działać w trybie zgodności. Możesz to odznaczyć za pomocą zasad grupy (lub po prostu odznaczając to w IE), lub możesz ustawić następujące ustawienia:

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

Najwyraźniej nie można zmienić ustawień widoku zgodności jako zasad grupy, ale jest to coś, co może być zmienione w rejestrze, ten metatag działa dla mnie dobrze, musiałem sprawić, by wymagany atrybut działał jako część formularza HTML , działało w Chrome i Firefox, ale nie w IE.

Oto ładny obraz tego, jakie przeglądarki obsługują każdy pojedynczy element HTML 5.

http://html5readiness.com/

Zwróć uwagę na jeden wspólny mianownik Google Chrome, który obsługuje wszystko. Mam nadzieję, że to pomoże

Kucanie
źródło
Wygląda na to, że Firefox i IE 10 obsługują teraz także wszystko. Wykres nie wyjaśnia tego tak wyraźnie, jak w przypadku Chrome.
Tony L.
0

Wstaw jako pierwszy element pod tagiem.

Zmusza to IE do renderowania strony w fizycznej wersji IE i ignoruje „Ustawienia trybu” przeglądarki. Można to ustawić w narzędziach programistycznych, spróbuj zmienić go na starszą wersję IE w celu przetestowania, należy to zignorować, a strona powinna wyglądać dokładnie tak samo.

technocrusaders.com
źródło
0

Jeśli masz dostęp do serwera, najbardziej niezawodnym sposobem jest zrobienie tego na samym serwerze, w IIS. Przejdź do nagłówków odpowiedzi HTTP IIS. Dodaj nazwę: Zgodna z X-UA
Wartość: IE = edge Spowoduje to zastąpienie przeglądarki i kodu.

stu
źródło
To resetuje się przy nowym wdrożeniu do IIS, jeśli jest ustawiony na poziomie witryny
Eman Pitts
0

Jeśli chcesz, aby każda strona ładowała wybraną treść i używasz asp.net. Po prostu zastosuj go jako pierwszy tag pod tagiem nagłówka w Widoki> udostępnione> Layout.cshtml

tylko wskazówka

rubypeach888
źródło