Standardmäßig zwingt IE8 Intranet-Websites in den Kompatibilitätsmodus. Ich habe versucht, den Meta-Header in IE8 zu ändern, aber er erkennt den Meta-Header nicht und verwendet nur die Browsereinstellung. Weiß jemand, wie man das deaktiviert?
Standardmäßig zwingt IE8 Intranet-Websites in den Kompatibilitätsmodus. Ich habe versucht, den Meta-Header in IE8 zu ändern, aber er erkennt den Meta-Header nicht und verwendet nur die Browsereinstellung. Weiß jemand, wie man das deaktiviert?
Antworten:
Es ist möglich, den Kompatibilitätsmodus im Intranet zu überschreiben.
Fügen Sie für IIS einfach den folgenden Code zur web.config hinzu. Arbeitete für mich mit IE9.
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
<add name="X-UA-Compatible" value="IE=edge" />
</customHeaders>
</httpProtocol>
</system.webServer>
Äquivalent für Apache:
Header set X-UA-Compatible: IE=Edge
Und für Nginx:
add_header "X-UA-Compatible" "IE=Edge";
Und für express.js:
res.set('X-UA-Compatible', 'IE=Edge')
Michael Irigoyen ist richtig, aber es ist etwas komplizierter ...
Wenn Sie das wunderbare Boilerplate von Paul Irish verwenden, haben Sie ungefähr Folgendes: -
<!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">
Dies funktioniert NICHT wie erwartet und erzwingt im IE den Kompatibilitätsmodus in einer Intranetumgebung, wenn Sie die Option "Intranetsites in Kompatibilitätsansicht anzeigen" aktiviert haben. Sie müssen die bedingten IE-Kommentare entfernen, um den Intranet-Kompatibilitätsmodus zu verhindern.
Der folgende Code funktioniert also:
<!doctype html>
<html class="no-js" lang="en">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
Wenn Sie vor der <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
Anweisung bedingte IE-Kommentare auslösen, werden Sie in einer Intranet- Umgebung in den Kompatibilitätsmodus versetzt, wenn Sie IE9 mit den Standardeinstellungen ausführen.
UPDATE - ZUSÄTZLICHE INFORMATIONEN: Beachten Sie jedoch, dass es einen Trick gibt, mit dem die HTML5-Kochplatte funktioniert:
Fügen Sie vor dem DOCTYPE einen leeren, bedingten Kommentar hinzu. Beachten Sie auch, dass Sie in diesem Fall auch bedingte Kommentare um die X-UA-Compatible
Direktive hinzufügen können , sodass die Seite auch HTML5-gültig ist. Also zum Beispiel:
<!--[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]-->
Ein Blog-Beitrag, der vom ersten Teil dieser Antwort inspiriert wurde , enthält weitere Details. Und übrigens: Wie in diesem Blog - Eintrag erwähnt, kann man auch den bedingten Kommentar vor dem DOCTYPE mit einem ersetzen halb bedingten Kommentar mit keiner Bedingung : <!--[]-->
. Also wie so:
<!--[]-->
<!doctype html>
<!--[if the boilerplate conditionals goes here<![endif]-->
<head>
<!--[if !HTML5]>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<![endif]-->
Beachten Sie jedoch, dass die letztere Variante ( <--[]--><!DOCTYPE html>
), wie z. B. durch diese Antwort auf eine andere Frage erläutert , das bekannte Problem aktiviert, in das sie - für ältere IE-Versionen ohne Unterstützung für X-UA-Compatioble
(lesen Sie: für IE7 und IE6) - den Browser einbindet Macken-Modus.
Wenn Sie das Menü "Extras" aufrufen und "Einstellungen für die Kompatibilitätsansicht" auswählen, wird in diesem Dialogfeld unten die Einstellung "Intranetsites im Kompatibilitätsmodus anzeigen" angezeigt. Wenn Sie dies deaktivieren, sollte das Problem behoben sein, und der IE verwendet den auf DOCTYPE basierenden Modus.
Die Antworten auf diese Frage sind etwas verwirrend.
Die beste Antwort ist derzeit eine serverseitige Lösung, die ein Flag im http-Header setzt. Einige Kommentare weisen darauf hin, dass eine Lösung mit einem Meta-Tag einfach nicht funktioniert.
Ich denke, dieser Blogeintrag gibt einen schönen Überblick über die Verwendung von Kompatibilitäts-Metainformationen und funktioniert meiner Erfahrung nach wie folgt: http://blogs.msdn.com/b/cjacks/archive/2012/02/29/using-x- ua-kompatibel-um-dauerhafte-Unternehmens-Webanwendungen zu erstellen.aspx
Die Haupt-Punkte:
Ein wichtiger Punkt (und ich denke, von diesem Punkt kommt viel Verwirrung) ist, dass der IE zwei "Klassen" von Modi hat:
Der Dokumentmodus bestimmt die Rendering-Engine (wie wird die Webseite gerendert).
Der Browsermodus bestimmt, welche User-Agent-Zeichenfolge (UA) der IE an Server sendet, welchen IE-Modus der Dokumentmodus standardmäßig verwendet und wie der IE bedingte Kommentare auswertet.
Weitere Informationen zum Dokumentmodus im Vergleich zum Browsermodus finden Sie in diesem Artikel: http://blogs.msdn.com/b/ie/archive/2010/06/16/ie-s-compatibility-features-for- site-developer.aspx? Redirected = true
Nach meiner Erfahrung beeinflussen die Kompatibilitäts-Metadaten nur den Dokumentmodus . Wenn Sie sich also auf die Browsererkennung verlassen, hilft Ihnen dies nicht weiter. Wenn Sie jedoch die Funktionserkennung verwenden, sollte dies der richtige Weg sein.
Daher würde ich empfehlen, das Meta-Tag (auf der HTML-Seite) mit dieser Syntax zu verwenden:
<meta http-equiv="X-UA-Compatible" content="IE=9,10" ></meta>
Hinweis: Geben Sie eine Liste der Browsermodi an, auf die Sie getestet haben.
Der Blog-Beitrag rät auch von der Verwendung von EmulateIEX ab. Hier ein Zitat:
Abgesehen davon finde ich es seltsam, wenn eine Anwendung EmulateIE7 oder EmulateIE8 anfordert. Diese Emulationsmodi sind selbst Entscheidungen. Anstatt genau zu sagen, was Sie wollen, fragen Sie nach einem von zwei Dingen und bestimmen dann, welches dieser beiden Dinge, indem Sie an anderer Stelle im Code nach einem DOCTYPE suchen (und dann versuchen zu verstehen, ob dieser DOCTYPE Ihnen Standards gibt oder Macken je nach Inhalt - eine andere manchmal verwirrende Aufgabe). Anstatt dies zu tun, halte ich es für wesentlich sinnvoller, direkt anzugeben, was Sie möchten, als eine Antwort zu geben, die selbst eine Frage ist. Wenn Sie IE7-Standards wünschen, verwenden Sie IE = 7 anstelle von IE = EmulateIE7. (Beachten Sie, dass dies nicht bedeutet, dass Sie keinen DOCTYPE verwenden sollten - Sie sollten.)
Versuchen Sie dieses Metatag:
<meta http-equiv="X-UA-Compatible" content="IE=8" />
Es sollte IE8 zwingen, als IE8-Standardmodus zu rendern, auch wenn "Intranetsites in Kompatibilitätsansicht anzeigen" aktiviert ist [entweder für Intranet oder alle Websites]. Ich habe es selbst in IE 8.0.6 versucht
Unser Systemadministrator hat dieses Problem behoben, indem er das Kontrollkästchen für unser Unternehmen global deaktiviert hat. Benutzer mussten sich nicht einmal abmelden.
Ich habe eine funktionierende Antwort gefunden, mit der die aktivierte Intranet-Kompatibilitätsansicht überschrieben werden kann. Fügen Sie einfach im OnInit-Ereignis Ihrer Seite diese Zeile hinzu (kein meta oder web.config customHeader erforderlich):
Response.AddHeader("X-UA-Compatible", "IE=EmulateIE8");
Versuchen Sie, Folgendes in die Kopfzeile einzufügen:
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
Mit freundlicher Genehmigung des HTML5 Boilerplate von Paul Irish (funktioniert aber auch in XHTML Transitional).
Ich konnte den Kompatibilitätsmodus überschreiben, indem ich das Meta-Tag im Kopfbereich als DAS ERSTE TAG angab , nicht nur als erstes Meta-Tag, sondern nur als SEHR ERSTES TAG .
Vielen Dank an @ stefan.s, dass Sie mich in Ihrer ausgezeichneten Antwort darauf aufmerksam gemacht haben. Vor dem Lesen hatte ich:
Das hat nicht funktioniert
<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" >
hat das Link-Tag aus dem Weg geräumt und es hat funktioniert
DAS FUNKTIONIERT :
<head><meta http-equiv="x-ua-compatible" content="IE=9" >
Ein IE8-Client, der auf Kompatibilität eingestellt ist, rendert die Seite als IE8-Standardmodus. Der Inhalt = 'IE = 9' bedeutet, dass der höchste verfügbare Standard bis einschließlich IE9 verwendet wird.
Dies ist nicht gerade eine Lösung, aber ich denke, es ist die beste. Auf unseren Intranetseiten teilen wir den Leuten mit, dass nur Firefox darauf zugreifen kann. Wir nehmen die IE-Benutzer hier nicht freundlich auf. Überprüfen Sie den Benutzeragenten auf der Server- oder Clientseite und verweigern Sie ihm den Zugriff vom IE. Und ich bin ein .NET-Programmierer.
Ich hatte mit diesem Problem zu kämpfen und wollte helfen, eine einzigartige Lösung und Einsicht zu bieten.
Bestimmte AJAX-basierte Frameworks fügen zu Beginn des Programms Javascripts und Stylesheets ein. <head>
Dies scheint zu verhindern, dass die etablierte Meta-Tag-Lösung ordnungsgemäß funktioniert. In diesem Fall stellte ich fest, dass das Problem direkt durch Einfügen in den HTTP-Antwortheader behoben werden kann, ähnlich wie bei Andras Csehis Antwort.
Für diejenigen von uns, die Java-Servlets verwenden, ist die Verwendung eines ServletFilter eine gute Möglichkeit, dies zu lösen.
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 {
}
}
Wir können dieses Problem in der Spring-Apache-Tomcat-Umgebung beheben, indem wir eine einzelne Zeile in der RequestInterceptor-Methode hinzufügen.
//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;
}
Referenz von - So erstellen Sie einen Filter und ändern den Antwortheader Hier erfahren Sie, wie Sie dieses Problem über einen RequestInterceptor (Spring) beheben können.
Wenn Sie möchten, dass Ihre Website den IE 8-Standardmodus erzwingt, verwenden Sie dieses Metatag zusammen mit einem gültigen DOCTYPE:
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8" />
Beachten Sie den Wert "EmulateIE8" und nicht den einfachen Wert "IE8".
Laut IE-Entwicklern sollte dies "Standard-DOCTYPEs im IE8-Standardmodus anzeigen; Quirks anzeigen DOCTYPEs im Quirks-Modus anzeigen. Verwenden Sie dieses Tag, um die Kompatibilitätsansicht auf Client-Computern zu überschreiben und Standards für IE8-Standards zu erzwingen."
Weitere Informationen zu diesem IE-Blogbeitrag: http://blogs.msdn.com/b/ie/archive/2008/08/27/introducing-compatibility-view.aspx
Diese Frage ist ein Duplikat des Force "Internet Explorer 8" -Browsermodus im Intranet .
Die Antworten dort zeigen an, dass es nicht möglich ist, die Kompatibilitätsansicht (auf der Serverseite) zu deaktivieren - https://stackoverflow.com/a/4130343/24267 . Dies scheint sicherlich der Fall zu sein, da keiner der Vorschläge, die ich versucht habe, funktioniert hat. In IE8 wird der "Browsermodus" auf die Kompatibilitätsansicht von Internet Explorer 8 eingestellt, unabhängig davon, welche Art von X-UA-kompatiblem Header Sie senden.
Ich musste eine spezielle Behandlung für IE7 und den Kompatibilitätsmodus durchführen, die dazu führte, dass der Browser mit IE8 renderte, aber meldete, dass es sich um IE7 handelte, und meinen Code beschädigte. So habe ich meinen Code repariert (mir ist bewusst, dass dies ein schrecklicher Hack ist und ich sollte auf Funktionen testen, die keine Browserversionen sind):
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) { // Lügner, das ist IE8 im Kompatibilitätsmodus. isIE8 = wahr; }}
Fügen Sie dies in das Head-Tag Ihrer Seite ein (für die gewünschte IE-Version):
<meta http-equiv="X-UA-Compatible" content="IE=8" />
Beachten Sie, dass dies NICHT die Tatsache ändert, dass der Browser angibt, dass er sich im Kompatibilitätsmodus befindet (als Browsermodus bezeichnet), die Seite jedoch im IE8-Standardmodus gerendert wird. Wenn es NOCH nicht so wiedergibt, wie Sie es wünschen, liegt es wahrscheinlich daran, dass Sie über Javascript verfügen, das die IE-Version fälschlicherweise überprüft. Siehe die folgende Blog - Post , um zu bestimmen , welche Eigenschaft sollten Sie Keying ausgeschaltet werden , weil selbst wenn Sie den Meta - X-UA-Compatible - Tag gesetzt ist , wird der User - Agent - String noch sagen MSIE 7.0 .
In meinem Fall musste ich für das Update eine Überprüfung für den IE7-Kompatibilitätsmodus hinzufügen. Ich habe dazu einen einfachen Javascript-Code verwendet:
//IE8 and later will have the word 'trident' in its user agent string.
if (navigator.userAgent.indexOf("Trident")>-1) { //do something }
Für alle anderen, die dies lesen und dies über das Gruppenrichtlinienobjekt für alle Benutzer deaktivieren möchten, ist dies die Einstellung:
Computerkonfiguration / Administrative Vorlagen / Windows-Komponenten / Internet Explorer / Kompatibilitätsansicht / Aktivieren des Internet Explorer-Standardmodus für lokales Intranet
obwohl die web.config edit es für mich behoben hat.
Ändern Sie die Header in .htaccess
BrowserMatch MSIE ie
Header set X-UA-Compatible "IE=Edge,chrome=1" env=ie
Die Lösung für dieses Problem finden Sie hier: https://github.com/h5bp/html5-boilerplate/issues/378
Der Kommentar von Stefan S zum Dokumentmodus im Vergleich zum Browsermodus war für mein Problem sehr relevant.
Ich habe die X-UA-Content-Metadaten auf der Seite, aber ich habe die Browserversion clientseitig über getestet navigator.appVersion
. Dieser Test spiegelt nicht die Metadaten wider, da der Browsermodus nicht der Dokumentmodus ist.
Die Antwort für mich war, Folgendes zu testen document.documentMode
:
function IsIE(n)
{
if (navigator.appVersion.indexOf("MSIE ") == -1) return false;
var sDocMode = document.documentMode;
return (isFinite(sDocMode) && sDocMode==n);
}
Jetzt spiegelt sich mein Meta-X-UA-Content-Tag in meinem Browsertest wider.
Warum mache ich so etwas verpöntes wie den Browser zu testen? Geschwindigkeit. Verschiedene meiner jQuery-Add-Ins, wie z. B. Tablesorter, sind in IE6 / 7 einfach zu langsam, und ich möchte sie deaktivieren. Ich bin nicht sicher, ob das Testen auf Browserfunktionen mir helfen kann, dieses Problem zu lösen.