IE10 wird im IE7-Modus gerendert. Wie erzwinge ich den Standardmodus?

Antworten:

244

Internet Explorer geht davon aus, dass die meisten Webseiten für frühere IE-Versionen geschrieben wurden, und untersucht den Doctype, die Meta-Tags und den HTML-Code, um den besten Kompatibilitätsmodus zu ermitteln (manchmal falsch). Selbst mit einem HTML5-Doctype versetzt der IE Ihre Website in den Kompatibilitätsmodus, wenn es sich um eine Intranetsite handelt.

Um sicherzustellen, dass Ihre Website immer den neuesten Standardmodus verwendet, können Sie entweder sicherstellen, dass sie deaktiviert Display intranet sites in Compatiblyist. Sie müssen dies jedoch auf jedem Computer tun, der sich lokal auf dem Webserver befindet (Anweisungen finden Sie unten).

Alternativ und noch besser können Sie den X-UA-CompatibleHeader verwenden, um dies vom Server aus zu deaktivieren. Es ist wichtig zu beachten, dass die Verwendung des Meta-Tags nicht funktioniert!

<!-- Doesn't always work! -->
<meta http-equiv="X-UA-Compatible" content="IE=edge" />

In MSDN wird erwähnt, dass die Verwendung eines Host-Headers oder eines Meta-Tags sogar Intranetsites überschreiben sollte. Der Artikel Grundlegendes zu Kompatibilitätsmodi in Internet Explorer 8 enthält Folgendes.

Eine große Anzahl interner Unternehmenswebsites ist für Internet Explorer 7 optimiert, sodass diese Standardausnahme diese Kompatibilität beibehält. ... Wenn ein Meta-Tag oder ein http-Header verwendet wird, um einen Kompatibilitätsmodus für das Dokument festzulegen, werden diese Einstellungen überschrieben.

In der Praxis funktioniert dies jedoch nicht. Die Verwendung eines Host-Headers ist die einzige Option, die funktioniert. Der Kommentarbereich des Artikels zeigt auch zahlreiche Beispiele für dieses genaue Problem.

Die Verwendung eines Meta-Tags hat auch einige andere Probleme, z. B. das Ignorieren des Tags, wenn es sich nicht direkt unter dem <head>Tag befindet oder wenn zu viele Daten vor dem Tag vorhanden sind (4k). In einigen IE-Versionen kann das Dokument möglicherweise erneut repariert werden, wodurch das Rendern verlangsamt wird. Weitere Informationen zu diesen Problemen finden Sie im MSDN-Artikel Best Practice: Bringen Sie Ihren HEAD in Ordnung .

Hinzufügen des X-UA-kompatiblen Headers

Wenn Sie .NET und IIS verwenden, können Sie dies dem hinzufügen. Sie können dies web.configauch programmgesteuert tun:

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

Wenn Sie IIS nicht verwenden, ist dies in jeder Sprache einfach. So geht's zum Beispiel in PHP:

header('X-UA-Compatible: IE=edge');

Solange der X-UA-CompatibleHeader mit dem HTML5-Doctype vorhanden ist, wird eine Site immer im neuesten Standardmodus ausgeführt.

Kompatibilitätsansicht deaktivieren
Es kann weiterhin nützlich sein, die Kompatibilitätsansicht zu deaktivieren. Deaktivieren Sie dazu Display all intranet sites in compatibility viewdie Einstellungen in der Kompatibilitätsansicht.

Einstellungen der Kompatibilitätsansicht

Sie können dies aufrufen, indem Sie auf klicken Alt, um das Menü aufzurufen.

Geben Sie hier die Bildbeschreibung ein

Bearbeiten Diese Antwort bezieht sich auch auf IE9.

Daniel Little
quelle
Verzeihen Sie meine Unwissenheit, aber wie komme ich zu diesem Einstellungsblatt? Ich habe die Einstellungen des Internet Explorers überprüft und mit der rechten Maustaste auf die Kompatibilitätsansicht in der Adressleiste geklickt - nichts.
Firedev
2
@Nick verwenden alt, um die Symbolleiste aufzurufen , es ist unter Tools -> Einstellungen für die kompatible Ansicht
Daniel Little
Oh danke, sieht so aus, als hätte es das gelöst. Man wundert sich, warum sie das überhaupt getan haben.
Firedev
25
+1000;). SO sollte jedes OP zwingen, diese Antwort zu sehen, wenn sie ein [IE] -Tag und ein Wort "kompatibel" in ihrer Frage haben, noch bevor sie diese Frage tatsächlich posten.
Teemu
2
Ich habe versucht, den Abschnitt mit den benutzerdefinierten Headern zur web.config des Projekts hinzuzufügen. Es scheint, dass die Einstellung die IE-Einstellung für die Verwendung der Kompatibilitätsansicht für Intranetsites nicht überschreibt.
DomenicDatti
25

Das funktioniert bei mir ..

<meta http-equiv="X-UA-Compatible" content="IE=edge" />
JGilmartin
quelle
11
NB, wie Lavinski oben sagt, "das Meta-Tag tut nichts für Intranetseiten."
Nathan
2
Für das, was es wert ist, für eine gehostete Website (Nicht-Intranet-Site), die das X-UA-CompatibleMeta-Tag hat, aber immer noch nicht den IE10-Standard-Dokumentmodus als Seitenstandard auslöst, habe ich festgestellt, dass sich das Meta-Tag unter Skript-Tags befindet oder nur ist <head>IE10 weint zu weit oben im DOM-Baum und setzt den Dokumentmodus auf IE8-Standards. Halten Sie also Ihr IE=edgeMeta-Tag in der Nähe des <title>Tags. Nicht immer eine einfache Lösung für Wordpress-Sites, wenn diese nicht in der Header-Vorlagendatei fest codiert ist. Ich bin mir nicht sicher, ob es IE11 wichtig ist, wo sich das Meta-Tag befindet, hoffe aber, dass dies für jemanden hilfreich ist.
Purefusion
1
Bei Blindkopien und Pastern wie mir fehlt das schließende Tag. . <meta http-equiv = "X-UA-kompatibel" content = "IE = edge"> </ meta>
John Newman
Sie müssen das Meta-Tag nur schließen, wenn Sie den XHTML-Doctype verwenden
Andy Brudtkuhl
2
Auch dieses Tag muss das erste Tag in <head> sein
Chris Gunawardena
10

Fügen Sie dem Kopf das folgende Tag hinzu

<meta http-equiv="X-UA-Compatible" content="IE=11,IE=10,IE=9,IE=8" />
Jeow Li Huan
quelle
5
Das sollte IE=Edgestattdessen sein
Daniel Little
1
Aber es besteht das Risiko, dass zukünftige Versionen von IE etwas Schlechtes
tun
7
Nein, das ist kein Risiko, wenn Sie die Spezifikation befolgen. Sie sehen keine Leute, die das für Chrom tun.
Daniel Little
1
Dieses Tag muss das erste Tag in <head> sein
Chris Gunawardena
1
Die Bearbeitung dieser Antwort zeigt, warum dies keine gute Idee ist. Die akzeptierte Antwort ist die beste Lösung.
David Granado
2

Das Meta-Tag bewirkt nichts für Intranetsites und mein Problem war das Rendern von IE10 im IE10-Kompatibilitätsmodus. Was das Problem für mich angegangen ist, war, die Antwort von @ Jeow weiter zu verfolgen und diesen Wert in einem http-Header zu verwenden, indem web.configunter IIS Folgendes hinzugefügt wurde :

<system.webServer>
  <httpProtocol> 
    <customHeaders> 
      <clear />
      <!-- <add name="X-UA-Compatible" value="IE=edge" /> not good enough -->
      <add name="X-UA-Compatible" value="IE=11,IE=10,IE=9,IE=8" /> 
    </customHeaders> 
  </httpProtocol>
</system.webServer>

Für IE-Zwecke umfassen Intranetsites öffentlich zugängliche Sites, die nicht extern weitergeleitet werden. Beispielsweise würde ein Stackoverflow-Mitarbeiter, der vom Büro aus arbeitet, stackoverflow.com wahrscheinlich im Kompatibilitätsmodus sehen.

ov
quelle
1

Es hat perfekt für mich funktioniert, als ich Folgendes tat:

Auf http://msdn.microsoft.com/en-us/library/gg699338(v=vs.85).aspx

Verwendete das genaue Beispiel, das sie in der ersten Box angegeben haben (fügte das fehlende </html>unten hinzu), öffnete es in IE10 und Standards wurden erzwungen. Ich denke, Sie benötigen möglicherweise tatsächlichen Inhalt im HTML, damit Standards nicht sicher erzwungen werden.

Mein Vorschlag wäre, Ihren leeren Code durch tatsächlichen Inhalt (etwas Einfaches) zu ersetzen und zu sehen, was er tut.

ZacNespral21
quelle