Warum wechselt IE9 auf meiner Website in den Kompatibilitätsmodus?

197

Ich habe gerade IE9 Beta installiert und auf einer bestimmten Site, die ich erstellt habe (HTML5), springt IE9 in den Kompatibilitätsmodus, es sei denn, ich sage manuell, dass dies nicht der Fall ist. Ich habe versucht, einige Teile der Website zu entfernen, aber keine Änderung. Einschließlich Entfernen aller CSS-Includes. Auf einer anderen Website von mir geht es gut.

Stellen Sie es auch nicht manuell ein, da sich IE9 dann an die Benutzereinstellung erinnert und Sie es nicht wieder auf automatisch zurücksetzen können (oder zumindest habe ich nicht herausgefunden, wie, auch nicht durch privates Durchsuchen und Leeren des Cache).

Wie auch immer. Die Site, auf der der Kompatibilitätsmodus aktiviert wird: http://alliancesatwar.com/guide/
Eine Site, auf der die korrekte Darstellung erfolgt : http://geuze.name/basement/ (Ich kann nicht mehr als 1 Hyperlink posten.)

Beide verwenden das gleiche doctypeund alle. Diese Websites haben viele Gemeinsamkeiten (abgesehen vom Erscheinungsbild), wenn sie dieselbe Grundvorlage verwenden (Codierung, Meta-Tags, Doctype und dasselbe Javascript).

Es wäre toll, wenn jemand eine Antwort für mich hätte! Eine HTML5-Website, die im IE7-Modus gerendert wird, ist ziemlich ... lahm.

René
quelle
5
Bitte erklären Sie "Springt in den Kompatibilitätsmodus"? Wenn Sie die Seitenaktualisierung und eine Sprechblase sehen, die besagt, dass der IE diese Seite aufgrund eines Problems in der Kompatibilitätsansicht aktualisiert hat, bedeutet dies, dass Sie einen IE-Fehler namens "Hard Assert" gefunden haben, der einem Absturz in der Rendering-Engine ähnelt . Wir sind daran interessiert, diese zu finden und zu beheben. Bitte melden Sie einen Fehler unter connect.microsoft.com/ie . Vielen Dank!
EricLaw

Antworten:

263

Funktioniert im IE9 documentMode für mich.

Ohne einen X-UA-CompatibleHeader / ein Meta zum Festlegen eines expliziten documentMode erhalten Sie einen Modus, der basiert auf:

  • ob der Benutzer zuvor in dieser Domäne auf die Schaltfläche "Kompatibilitätsansicht" geklickt hat;
  • Vielleicht auch, ob dies automatisch aufgrund eines anderen Inhalts auf der Site geschehen ist, wodurch der Renderer von IE8 / 9 abstürzt und auf den alten Renderer zurückgreift.
  • ob der Benutzer sich dafür entschieden hat, alle Websites standardmäßig in die Kompatibilitätsansicht zu setzen;
  • ob der IE glaubt, dass sich die Site in Ihrem Intranet befindet, und daher standardmäßig die Kompatibilitätsansicht verwendet;
  • ob sich die betreffende Site in der Microsoft-eigenen Liste der Websites befindet, für die eine Kompatibilitätsansicht erforderlich ist.

Sie können diese Einstellungen unter "Extras -> Einstellungen für die Kompatibilitätsansicht" im IE-Menü ändern. Natürlich ist dieses Menü jetzt versteckt, sodass Sie es erst sehen, wenn Sie Alt drücken.

Wenn Sie als Site-Autor sicher sind, dass Ihre Site den Standards entspricht (wird in anderen Browsern gut wiedergegeben und mithilfe von Feature-Sniffing entschieden, welche Browser-Problemumgehungen verwendet werden sollen), empfehle ich Folgendes:

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

oder der HTTP-Header:

X-UA-Compatible: IE=Edge

um den neuesten Renderer zu erhalten, unabhängig davon, welche IE-Version verwendet wird.

Bobince
quelle
79
Wichtiger Hinweis: Wenn IE 9 so konfiguriert ist, dass Intranetsites immer im Kompatibilitätsmodus angezeigt werden, überschreiben weder das Meta-Tag noch der HTTP-Header dies.
Jacob
29
Wie Jacob erwähnt, kann der IE standardmäßig alle lokalen / Intranet-Sites so anzeigen, dass sie sich im Kompatibilitätsmodus befinden. Drücken Sie Alt -> Einstellungen für die Kompatibilitätsansicht Extras und stellen Sie sicher, dass das Kontrollkästchen nicht aktiviert ist.
Cory Mawhorter
30
Das Meta-Tag hat bei mir nur funktioniert, wenn ich es direkt nach <head> gesetzt habe (siehe auch die Antwort unten). Als ich es weiter unten im <head> -Element abgelegt habe, hat es nicht funktioniert (ich habe immer noch die zerrissene Seite).
Boris van Schooten
13
@ Jacob: Das ist irgendwie irreführend. Ja, Sie befinden sich im Kompatibilitätsbrowser-Modus und es gibt keinen Ausweg. Sie können jedoch weiterhin den HTTP-Header verwenden, um den Dokumentmodus festzulegen, auf den die IE-Version für Ihre Site am besten geeignet ist. IE = Edge sollte immer die neueste Rendering-Engine enthalten. Selbst wenn Sie sich technisch im Kompatibilitätsmodus befinden, können Sie Ihre Seiten wie im normalen Modus rendern lassen. Korrigieren Sie mich, wenn ich falsch liege, aber zumindest unsere Intranetsite funktioniert genau so (auch wenn die Einstellung "Intranetseiten in Kompatibilitätsansicht anzeigen" aktiviert ist).
mkataja
7
@BorisvanSchooten: Ich weiß nicht, ob dies der Grund dafür ist, aber <meta>Tags müssen innerhalb der ersten 512 Bytes einer verarbeiteten HTML-Datei liegen. Ich sage "verarbeitet", weil Sie dort oben alle Arten von PHP haben können, aber der gerenderte Code ist wichtig. Ich bin dort angekommen, wo ich alle meine Kommentare <meta>unter die <meta>Tags gesetzt habe, damit ich die Anforderung nicht verletze.
doubleJ
33

ich lege

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

als erstes danach

<head>

(Ich habe es irgendwo gelesen, ich kann mich nicht erinnern)

Ich konnte nicht glauben, dass es funktioniert hat !!

pkario
quelle
Sie müssen die Registerkarte schließen und eine neue Registerkarte öffnen. Haben Sie das versucht?
Zeb
1
Er sagte "tat" nicht "tat nicht";)
Nathan JB
14
+1, das ist eine sehr wertvolle Notiz . Wenn Sie <script>s innen <head>vor dieser metaAussage, es (IE = Flanke) wird ignoriert.
Jakub.g
22

Um den IE zum Rendern im IE9-Standardmodus zu zwingen, sollten Sie verwenden

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

Einige Bedingungen können dazu führen, dass IE9 in die Kompatibilitätsmodi wechselt. Standardmäßig kann dies auf Intranetsites auftreten.

Delan Azabani
quelle
Es funktioniert auf der anderen Website. Das sollte es also nicht sein. Außerdem ist dieses Meta-Tag böse, da Sie es jedes Mal manuell aktualisieren müssen, wenn es eine neue IE-Version gibt.
René
2
Entschuldigung, ich kann Ihr Problem nicht beheben. Ich habe jedoch meine Antwort so bearbeitet, dass sie IE=edgestattdessen verwendet wird. Dabei wird immer die Verwendung der neuesten verfügbaren Engine aufgerufen.
Delan Azabani
Ihre Annahme ist falsch. In den Demos wird X-UA-kompatibel angegeben, um zu verhindern, dass der IE die Schaltfläche Kompatibilitätsansicht anzeigt, da der Inhalt der Website nicht ordnungsgemäß funktioniert, wenn der Benutzer darauf drückt.
EricLaw
@ RenGeuze, du hast es falsch verstanden. Edge bezieht sich immer auf die neueste Version von IE.
Neoswf
@ DelanAzabani Mein Intranet-Portal wechselt in den Kompatibilitätsmodus, obwohl ich wie vorgeschlagen ein Meta-Tag hinzugefügt habe. Bitte schlagen Sie vor, wie es sich auflösen und im Standardmodus bleiben könnte - IE 8, IE 8-Kompatibilität, dann möchte ich nur IE 8.
dsi
6

Ich habe diesen Kommentar in einem separaten StackOverflow-Thread gepostet, dachte aber, dass es sich lohnt, ihn hier zu wiederholen:

Für unsere interne ASP.Net-App machte das Hinzufügen des Tags "X-UA-kompatibel" auf der Webseite, in der web.config oder im Code-Behind absolut keinen Unterschied.

Das einzige, was für uns funktioniert hat, war, diese Einstellung in IE8 manuell zu deaktivieren:

Geben Sie hier die Bildbeschreibung ein

(Seufzer.)

Dieses Problem scheint nur bei IE8 und IE9 auf Intranetseiten aufzutreten. Externe Websites funktionieren einwandfrei und verwenden die richtige Version von IE8 / 9, aber für interne Websites entscheidet IE9 plötzlich, dass es sich tatsächlich um IE7 handelt, und unterstützt HTML 5 nicht.

Nein, ich verstehe diese Logik auch nicht ganz.

Meine widerstrebende Lösung bestand darin, zu testen, ob der Browser HTML 5-Unterstützung bietet (indem ich eine Zeichenfläche erstelle und prüfe, ob sie gültig ist) und diese Nachricht dem Benutzer anzuzeigen, wenn sie nicht gültig ist:

Geben Sie hier die Bildbeschreibung ein

Es ist nicht besonders benutzerfreundlich, aber es scheint die einzige Möglichkeit zu sein, interne HTML 5-Webanwendungen ordnungsgemäß auszuführen, wenn der Benutzer diese nervige Einstellung deaktiviert.

Oder bringen Sie die Benutzer dazu, Chrome zu verwenden. ;-);

Mike Gledhill
quelle
1

Die Website unter http://www.HTML-5.com/index.html verfügt zwar über das X-UA-kompatible Meta-Tag, wechselt jedoch weiterhin in die Kompatibilitätsansicht, wie durch das Symbol "zerrissene Seite" in der Adressleiste angezeigt. Wie erhalten Sie die Menüoption, um IE 9 (Final Version 9.0.8112.16421) zum Rendern einer Seite im Standardmodus zu zwingen? Ich habe versucht, mit der rechten Maustaste auf das Symbol der zerrissenen Seite sowie auf den Trick "Alt" zu klicken, um die von Rene Geuze erwähnten zusätzlichen Menüoptionen anzuzeigen, aber diese haben nicht funktioniert.

Rob bei TVSeries.com
quelle
4
Entfernen Sie den bedingten IE-Kommentar um das Meta. Sie stellen die Seite als application/xhtml+xmlbereit, daher werden XML-Parsing-Regeln verwendet. XML unterstützt keine bedingten Kommentare. Auf jeden Fall macht es keinen Sinn; Der Browser muss einen Modus auswählen, bevor er entscheiden kann, welche bedingten Kommentare interpretiert werden sollen.
Bobince
1

Abgesehen davon, dass Sie auf moderneren Websites bedingte Anweisungen für Ihr HTML-Tag gemäß Boilerplate verwenden, führt dies aus irgendeinem Grund dazu, dass ie9 standardmäßig den Kompatibilitätsmodus verwendet. Die Lösung hier besteht darin, Ihre bedingten Anweisungen aus dem HTML-Tag zu verschieben und sie dem Body-Tag hinzuzufügen, dh aus dem Kopfabschnitt. Auf diese Weise können Sie diese Klassen in Ihrem Stylesheet weiterhin verwenden, um ältere Browser anzusprechen.

uknowit2
quelle
0

Sieht für mich gut aus:

Alt-Text

Bist du sicher, dass du die Einstellungen nicht global vorgenommen hast oder so? Dies ist eine Neuinstallation der Beta unter Windows 7. Die Entwicklertools melden, dass die Seite standardmäßig den IE9-Standardmodus verwendet.

Yi Jiang
quelle
Ich hatte mehr als 1 Bericht über diesen Fehler. Obwohl es vielleicht mit dem Basisverzeichnis ( alliancesatwar.com ) zu tun hat, dass alle Unterverzeichnisse auch im Kompatibilitätsmodus gerendert werden. Aber dann habe ich die Frage, was im Stammverzeichnis der Website dazu führt, dass der IE die Website im Kompatibilitätsmodus rendert. Vielleicht ist zumindest diese Anleitung richtig codiert. Ich hoffe es dann.
René
@ René Seltsam, ich habe es gerade reproduziert, indem ich auf der Homepage auf den Link Guide geklickt habe. Aber dies geschah nur einmal, und nach ein paar Versuchen habe ich dies noch nicht reproduziert, nur das nur einmal
Yi Jiang
0

Ich musste dieses Problem kürzlich beheben und habe Folgendes getan:

Bei dieser Lösung geht es zunächst darum, den Apache-Server zu optimieren.

Der zweite Hauptgedanke ist, dass es einen Fehler im IE9 gibt, was bedeutet, dass das Meta-Tag nicht funktioniert. Versuchen Sie dies anstelle dieser Lösung

  • finde / öffne deine httpd.conf
  • Kommentar entfernen / oder folgende Zeile hinzufügen

    LoadModule headers_module modules/mod_headers.so
  • Fügen Sie die folgenden Zeilen hinzu

    <IfModule headers_module>
        Header set X-UA-Compatible: IE=EmulateIE8
    </IfModule>
  • Speichern / Starten Sie Ihren Apache-Server neu.

  • Navigieren Sie mit IE9 zu Ihrer Seite, verwenden Sie Tools wie Wireshark oder Fiddler oder verwenden Sie IE-Entwicklertools, um zu überprüfen, ob der Header vorhanden ist
Abderrazak BOUADMA
quelle