Domyślnie IE8 zmusza strony intranetowe do trybu zgodności. Próbowałem zmienić nagłówek meta na IE8, ale nie potwierdza on nagłówka meta i po prostu korzysta z ustawień przeglądarki. Czy ktoś wie, jak to wyłączyć?
Domyślnie IE8 zmusza strony intranetowe do trybu zgodności. Próbowałem zmienić nagłówek meta na IE8, ale nie potwierdza on nagłówka meta i po prostu korzysta z ustawień przeglądarki. Czy ktoś wie, jak to wyłączyć?
Odpowiedzi:
Możliwe jest zastąpienie trybu zgodności w intranecie.
W przypadku IIS wystarczy dodać poniższy kod do pliku web.config. Pracował dla mnie z IE9.
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
<add name="X-UA-Compatible" value="IE=edge" />
</customHeaders>
</httpProtocol>
</system.webServer>
Odpowiednik dla Apache:
Header set X-UA-Compatible: IE=Edge
A dla nginx:
add_header "X-UA-Compatible" "IE=Edge";
I dla express.js:
res.set('X-UA-Compatible', 'IE=Edge')
Michael Irigoyen ma rację, ALE jest to trochę bardziej skomplikowane ...
jeśli korzystasz ze wspaniałego bojlera autorstwa Paula Irisha, będziesz mieć coś takiego: -
<!doctype html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
<!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]-->
<!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
To NIE będzie działać zgodnie z oczekiwaniami i wymusi w IE tryb zgodności w środowisku intranetowym, jeśli zaznaczysz opcję „Wyświetl strony intranetowe w widoku zgodności”. Musisz usunąć warunkowe komentarze IE, aby zapobiec trybowi zgodności z intranetem.
Tak więc następujący kod będzie działał:
<!doctype html>
<html class="no-js" lang="en">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
Zasadniczo, jeśli uruchomisz warunkowe komentarze IE przed <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
instrukcją, będziesz zmuszony do przejścia do trybu zgodności w środowisku intranetowym, jeśli używasz IE9 z ustawieniami domyślnymi.
AKTUALIZACJA - INFORMACJE DODATKOWE: Należy jednak pamiętać, że istnieje sztuczka, która sprawi, że HTML-Boilplate będzie działał:
Dodaj pusty, warunkowy komentarz przed DOCTYPE. I uwaga, jak również, że gdy robisz to , to można też dodawać komentarzy warunkowych wokół X-UA-Compatible
dyrektywy, dzięki czemu strona HTML5 ważne jak dobrze. Na przykład:
<!--[if HTML5]><![endif]-->
<!doctype html>
<!--[if the boilerplate conditionals goes here<![endif]-->
<head>
<!--[if !HTML5]>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<![endif]-->
Wpis na blogu zainspirowany pierwszą częścią tej odpowiedzi zawiera więcej szczegółów. A tak na marginesie: jak wspomniano w tym blogu, można również wymienić komentarza warunkowego przed DOCTYPE z pół warunkowym komentarzu z żadnym warunkiem : <!--[]-->
. Tak więc tak:
<!--[]-->
<!doctype html>
<!--[if the boilerplate conditionals goes here<![endif]-->
<head>
<!--[if !HTML5]>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<![endif]-->
Należy jednak pamiętać, że ten drugi wariant ( <--[]--><!DOCTYPE html>
), jak wyjaśniono np. W tej odpowiedzi na inne pytanie , aktywuje dobrze znany problem, który - w przypadku starszych wersji IE bez obsługi X-UA-Compatioble
(czytaj: dla IE7 i IE6) - spowoduje włączenie przeglądarki do dziwaczny tryb.
Po rozwinięciu menu „Narzędzia” i wybraniu „Ustawienia widoku zgodności” W tym oknie dialogowym na dole znajduje się ustawienie „Wyświetlaj strony intranetowe w trybie zgodności”. Jeśli odznaczysz to, powinno to rozwiązać problem, a IE użyje trybu opartego na DOCTYPE.
W odpowiedziach na to pytanie jest pewien zamieszanie.
Najważniejszą odpowiedzią jest obecnie rozwiązanie po stronie serwera, które ustawia flagę w nagłówku http, a niektóre komentarze wskazują, że rozwiązanie wykorzystujące metatag po prostu nie działa.
Myślę, że ten wpis na blogu zawiera ładny przegląd sposobu korzystania z metainformacji dotyczących zgodności. Z mojego doświadczenia wynika, że opisano: http://blogs.msdn.com/b/cjacks/archive/2012/02/29/using-x- Kompatybilny z-do-tworzenia-trwałych-aplikacji-korporacyjnych.aspx
Główne punkty:
Jedną ważną kwestią (i myślę, że z tego punktu wynika wiele nieporozumień) jest to, że IE ma dwie „klasy” trybów:
Tryb dokumentu określa mechanizm renderowania (sposób renderowania strony internetowej).
Tryb przeglądarki określa, co ciąg IE użytkownika-agenta (UA) wysyła do serwerów, co domyślnie IE trybu dokumentu i jak IE ocenia komentarze warunkowe.
Więcej informacji o trybie dokumentu vs. trybie przeglądarki można znaleźć w tym artykule: http://blogs.msdn.com/b/ie/archive/2010/06/16/ie-s-compatibility-features-for- site-developers.aspx? Przekierowano = true
Z mojego doświadczenia wynika, że metadane zgodności będą miały wpływ tylko na tryb dokumentu . Więc jeśli polegasz na wykrywaniu przeglądarki, to ci nie pomoże. Ale jeśli używasz funkcji wykrywania funkcji, powinna to być właściwa droga.
Polecam więc użycie metatagu (na stronie HTML) przy użyciu tej składni:
<meta http-equiv="X-UA-Compatible" content="IE=9,10" ></meta>
Uwaga: podaj listę trybów przeglądarki, które przetestowałeś.
Wpis na blogu odradza również korzystanie z EmulateIEX. Oto cytat:
To powiedziawszy, jedną rzeczą, która wydaje mi się dziwna, gdy aplikacja żąda EmulateIE7 lub EmulateIE8. Te tryby emulacji same są decyzjami. Zamiast sprecyzować, czego chcesz, pytasz o jedną z dwóch rzeczy, a następnie określasz, które z tych dwóch rzeczy, szukając gdzie indziej w kodzie DOCTYPE (a następnie próbując zrozumieć, czy ten DOCTYPE da ci standardy lub dziwactwa w zależności od jego zawartości - inne czasem mylące zadanie). Zamiast tego uważam, że rozsądniej jest bezpośrednio określić, czego chcesz, niż dać odpowiedź, która sama jest pytaniem. Jeśli chcesz standardów IE7, użyj IE = 7 zamiast IE = EmulujIE7. (Pamiętaj, że nie oznacza to, że nie powinieneś używać DOCTYPE - powinieneś.)
Wypróbuj ten metatag:
<meta http-equiv="X-UA-Compatible" content="IE=8" />
Powinien zmusić IE8 do renderowania w trybie standardowym IE8, nawet jeśli „Wyświetl strony intranetowe w widoku kompatybilności” jest zaznaczone [dla intranetu lub wszystkich stron], wypróbowałem to samo w IE 8.0.6
Nasz administrator systemu rozwiązał ten problem, odznaczając pole globalnie dla naszej organizacji. Użytkownicy nawet nie musieli się wylogowywać.
Znalazłem działającą odpowiedź, która pozwala zastąpić zaznaczony widok zgodności z intranetem. Po prostu dodaj w zdarzeniu OnInit swojej strony ten wiersz (nie potrzebujesz meta lub web.config customHeader):
Response.AddHeader("X-UA-Compatible", "IE=EmulateIE8");
Spróbuj umieścić następujące informacje w nagłówku:
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
Dzięki uprzejmości Paula Irish HTML5 Boilerplate (ale działa również w XHTML Transitional).
Byłem w stanie zastąpić tryb zgodności, określając metatag jako PIERWSZĄ TAGĘ w sekcji head, nie tylko jako pierwszy metatag, ale jako i tylko jako BARDZO PIERWSZA TAGA .
Dzięki @ stefan.s za umieszczenie mnie w doskonałej odpowiedzi. Przed przeczytaniem miałem:
TO NIE DZIAŁAŁO
<head>
<link rel="stylesheet" type="text/css" href="https://stackoverflow.com/qmuat/plugins/editors/jckeditor/typography/typography.php"/>
<meta http-equiv="x-ua-compatible" content="IE=9" >
usunęłam tag link z drogi i zadziałało
TO DZIAŁA :
<head><meta http-equiv="x-ua-compatible" content="IE=9" >
Tak więc klient IE8 ustawiony do używania zgodności renderuje stronę jako tryb standardowy IE8 - treść = „IE = 9” oznacza używanie najwyższego standardu dostępnego do IE9 włącznie.
To nie jest dokładnie rozwiązanie, ale uważam, że jest najlepsze. Na naszych stronach intranetowych mówimy ludziom, że dostęp do nich może mieć tylko Firefox, nie podoba nam się to tutaj użytkownicy IE. Sprawdź agenta użytkownika po stronie serwera lub klienta i odmów mu dostępu z IE. Jestem programistą .NET.
Walczyłem z tym problemem i chciałem pomóc w dostarczeniu unikalnego rozwiązania i wglądu.
Niektóre frameworki oparte na AJAX wstrzykną skrypty javascript i arkusze stylów na początku, <head>
a zrobienie tego wydaje się uniemożliwiać prawidłowe funkcjonowanie dobrze ustalonego metatagu. W tym przypadku odkryłem, że bezpośrednie wstrzykiwanie do nagłówka odpowiedzi HTTP, podobnie jak odpowiedź Andrasa Csehi rozwiąże problem.
Jednak dla tych, którzy używają serwletów Java, dobrym sposobem na rozwiązanie tego problemu jest użycie filtru ServletFilter.
public class EmulateFilter implements Filter {
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
HttpServletResponse response = ((HttpServletResponse)arg1);
response.addHeader("X-UA-Compatible", "IE=8");
arg2.doFilter(arg0, arg1);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
}
Możemy rozwiązać ten problem w środowisku Spring-Apache-tomcat, dodając jedną linię w metodzie RequestInterceptor -
//before the actual handler will be executed
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler)
throws Exception {
// Some logic
// below statement ensures IE trusts the page formatting and will render it acc. to IE 8 standard.
response.addHeader("X-UA-Compatible", "IE=8");
return true;
}
Odsyłacz z - Jak utworzyć filtr i zmodyfikować nagłówek odpowiedzi Obejmuje on sposób rozwiązania tego problemu za pomocą RequestInterceptor (Spring).
Jeśli chcesz, aby Twoja witryna wymusiła tryb standardów IE 8, użyj tego metatagu wraz z prawidłowym DOCTYPE:
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8" />
Zwróć uwagę na wartość „EmulujIE8” zamiast zwykłego „IE8”.
Zdaniem deweloperów IE powinno to oznaczać: „Wyświetl standardy DOCTYPE w trybie norm IE8; Wyświetl dziwactwa DOCTYPE w trybie dziwactw. Użyj tego znacznika, aby zastąpić widok zgodności na komputerach klienckich i wymusić standardy na standardy IE8”.
Więcej informacji na temat tego postu na blogu IE: http://blogs.msdn.com/b/ie/archive/2008/08/27/introducing-compatibility-view.aspx
To pytanie jest kopią trybu Force „Internet Explorer 8” w intranecie .
Odpowiedzi tam wskazują, że nie można wyłączyć widoku zgodności (po stronie serwera) - https://stackoverflow.com/a/4130343/24267 . Z pewnością wydaje się, że tak jest, ponieważ żadna z sugestii, które wypróbowałem, nie zadziałała. W IE8 „Tryb przeglądarki” zostaje ustawiony na widok zgodności z Internet Explorerem 8 bez względu na to, jaki rodzaj nagłówka zgodnego z X-UA wysyłasz.
Musiałem zrobić specjalną obsługę dla IE7 i trybu zgodności, co spowodowało, że przeglądarka wyświetla się przy użyciu IE8, ale zgłosiła, że to IE7, zepsuła mój kod. Tak naprawiłem swój kod (wiem, że to okropny hack i powinienem testować funkcje, a nie wersje przeglądarki):
isIE8 = navigator.appVersion.indexOf („MSIE”)! = -1 && parseFloat (navigator.appVersion.split („MSIE”) [1]) == 8; if (! isIE8 && navigator.appVersion.indexOf („MSIE”)! = -1 && parseFloat (navigator.appVersion.split („MSIE”) [1]) == 7 && navigator.appVersion.indexOf („Trident”) ! = -1) { // Kłamca, to jest IE8 w trybie zgodności. isIE8 = true; }
Dodaj to wewnątrz tagu strony (kierując na żądaną wersję IE):
<meta http-equiv="X-UA-Compatible" content="IE=8" />
Uwaga: NIE zmieni to faktu, że przeglądarka mówi, że jest w trybie zgodności (zwanym trybem przeglądarki), ale strona będzie renderowana w trybie standardów IE8. Jeśli nadal NIE wyświetla się tak, jak chcesz, to prawdopodobnie dlatego, że masz JavaScript, który błędnie sprawdza wersję IE. Zobacz następujący post na blogu, aby ustalić, z której właściwości należy wyłączyć klucz, ponieważ nawet jeśli ustawisz metatag zgodny z X-UA, ciąg agenta użytkownika nadal będzie mówił MSIE 7.0 .
W moim przypadku dla poprawki musiałem dodać kontrolę trybu zgodności IE7. Zrobiłem to za pomocą prostego kodu javascript:
//IE8 and later will have the word 'trident' in its user agent string.
if (navigator.userAgent.indexOf("Trident")>-1) { //do something }
Dla każdego, kto to czyta i chce wyłączyć to przez GPO dla wszystkich użytkowników, jest to ustawienie:
Konfiguracja komputera / Szablony administracyjne / Składniki systemu Windows / Internet Explorer / Widok zgodności / Włącz tryb normalny programu Internet Explorer dla lokalnego intranetu
chociaż edycja web.config naprawiła to dla mnie.
Zmień nagłówki w .htaccess
BrowserMatch MSIE ie
Header set X-UA-Compatible "IE=Edge,chrome=1" env=ie
Znaleźć rozwiązanie tego problemu tutaj: https://github.com/h5bp/html5-boilerplate/issues/378
Komentarz Stefana S na temat trybu dokumentu i trybu przeglądarki był bardzo istotny dla mojego problemu.
Mam na stronie metadane X-UA-Content, ale po stronie klienta testowałem wersję przeglądarki za pośrednictwem navigator.appVersion
. Ten test nie odzwierciedla metadanych, ponieważ daje tryb przeglądarki, a nie tryb dokumentu.
Odpowiedzią było dla mnie przetestowanie document.documentMode
czegoś takiego:
function IsIE(n)
{
if (navigator.appVersion.indexOf("MSIE ") == -1) return false;
var sDocMode = document.documentMode;
return (isFinite(sDocMode) && sDocMode==n);
}
Teraz mój metatag X-UA-Content odzwierciedla się w teście przeglądarki.
Dlaczego robię takie marne rzeczy, jak testowanie przeglądarki? Prędkość. Różne moje dodatki jQuery, takie jak tableorter, są po prostu zbyt wolne na IE6 / 7 i chcę je wyłączyć. Nie jestem pewien, czy testowanie funkcji przeglądarki może pomóc mi rozwiązać to inaczej.