Deaktivieren Sie den IE-Kompatibilitätsmodus mithilfe von Tags


375

Ich arbeite für einen Client, der den Kompatibilitätsmodus auf allen Intranetsites erzwingt. Ich habe mich gefragt, ob es ein Tag gibt, das ich in meinen HTML-Code einfügen kann, um den Kompatibilitätsmodus zu deaktivieren.


Ich denke, dass die Antwort, die Sie suchen, hier ist: stackoverflow.com/questions/1014666/…
Gabriel

45
Eigentlich habe ich nach dem genauen Gegenteil gesucht, das seinen Standard auf Kompatibilitätsmodus setzt, das ist einfach verrückt.
Al Katawazi

12
Schlechtes Javascript in einer Legacy-App, die auf etwas anderem als IE7 abstürzt, setzt den Standard auf Kompatibilität. Eines Tages werden wir es ersetzen ...
Pete die heidnische Rennmaus

1
@ petethepagan-gerbil bist du dazu gekommen, es zu ersetzen? : P
icedwater

1
@icedwater Ich habe das Unternehmen vor über 6 Jahren verlassen :) Wir haben kleine Verbesserungen vorgenommen, um die Probleme zu beseitigen, wenn wir eine Änderung in demselben Bereich hatten, aber die technische Verschuldung wurde dort nie priorisiert. Ich weiß nicht, ob es am Ende jemals repariert wurde.
Pete die heidnische Rennmaus

Antworten:


535

Es gibt den "Kanten" -Modus .

<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>

Von der verlinkten MSDN-Seite:

Der Edge-Modus weist Windows Internet Explorer an, Inhalte im höchsten verfügbaren Modus anzuzeigen, wodurch das Lock-In-Paradigma tatsächlich gebrochen wird. Mit Internet Explorer 8 entspricht dies dem IE8-Modus. Wenn eine (hypothetische) zukünftige Version von Internet Explorer einen höheren Kompatibilitätsmodus unterstützt, werden Seiten, die auf den Edge-Modus eingestellt sind, im höchsten von dieser Version unterstützten Modus angezeigt. Dieselben Seiten werden jedoch weiterhin im IE8-Modus angezeigt, wenn sie mit Internet Explorer 8 angezeigt werden.

Der "Kanten" -Modus wird jedoch in der Produktion nicht empfohlen:

Es wird empfohlen, dass Webentwickler die Verwendung des Edge-Modus auf Testseiten und andere nicht produktive Zwecke beschränken, da das Rendern von Seiteninhalten in zukünftigen Versionen von Windows Internet Explorer möglicherweise unerwartete Ergebnisse liefert.

Ich verstehe ehrlich gesagt nicht ganz warum. Demnach ist der beste Weg im Moment die Verwendung IE=8.


7
Ab dem 06.08.2012 scheint Microsoft IE=10auf ihren eigenen Websites zu verwenden. Wenn Sie Ihre Site in IE10 (Vorschau-Version) getestet haben, können Sie diese sicher verwenden. Andernfalls möchten Sie vielleicht vorerst dabei bleiben IE=9.
Calvinf

75
Ich habe festgestellt, dass dies NICHT funktioniert, wenn der Benutzer (oder der Systemadministrator) den Kompatibilitätsmodus standardmäßig aktiviert hat, indem Sie zu Tools->Compatibility View SettingsAlle Websites in der Kompatibilitätsansicht anzeigen aktiviert haben . Um das Problem zu beheben, muss ich den Header in der HTTP-Antwort zurückgeben:X-UA-Compatible: IE=edge
Speedplane

10
+1 für Speedplane - Der IE10-Kompatibilitätsmodus ist für Intranetsites standardmäßig aktiviert - UGH ... danke für die Suche!
Viperguynaz

132
Ratschlag für diejenigen, die diese Antwort finden, sie aber nicht zum Laufen bringen können. Das Kompatibilitäts-Meta-Tag MUSS das erste Meta-Tag sein, und vor dem Tag dürfen KEINE bedingten IE-Anweisungen stehen. Mehr: tesmond.blogspot.com/2011/10/…
Chris Sobolewski

2
Danke Chris! Ich hatte 30 Minuten damit zu kämpfen, als ich endlich Ihren Kommentar las. Ich hatte es nicht zuerst.
Hawkee

91

Nach vielen Stunden bei der Fehlerbehebung ... Hier sind einige kurze Highlights, die uns aus den X-UA-CompatibleDokumenten geholfen haben : http://msdn.microsoft.com/en-us/library/cc288325(VS.85).aspx#ctl00_contentContainer_ctl16

Verwenden von <meta http-equiv="X-UA-Compatible" content=" _______ " />

  • Die Standardbenutzer-Agent- Modi (die nicht emulierten) ignorieren <!DOCTYPE>Anweisungen auf Ihrer Seite und rendern basierend auf den Standards, die von dieser IE-Version unterstützt werden (z. B. IE=8werden Tabellenabstandsabstände und einige Pseudo-Selektoren besser eingehalten als IE=7).

  • Während die Emulationsmodi den IE anweisen , alle <!DOCTYPE>Anweisungen auf Ihrer Seite zu befolgen , wird der Standardmodus basierend auf der von Ihnen ausgewählten Version und der Mackenmodus basierend auf dem Modus gerendertIE=5

  • Mögliche Werte für das contentAttribut sind:

    content="IE=5"

    content="IE=7"

    content="IE=EmulateIE7"

    content="IE=8"

    content="IE=EmulateIE8"

    content="IE=9"

    content="IE=EmulateIE9"

    content="IE=edge"


67

Wenn Sie mit einer Seite in der Intranetzone arbeiten, werden Sie möglicherweise feststellen, dass IE9, egal was Sie tun, in den IE7-Kompatibilitätsmodus wechselt.

Dies liegt an der Einstellung in den IE-Kompatibilitätseinstellungen, die besagt, dass alle Intranetsites im Kompatibilitätsmodus ausgeführt werden sollen. Sie können dies über eine Gruppenrichtlinie deaktivieren (oder einfach im IE deaktivieren) oder Folgendes festlegen:

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

Dies funktioniert (wie in anderen Antworten beschrieben), wird jedoch möglicherweise zunächst nicht so angezeigt: Es muss erfolgen, bevor die Stylesheets deklariert werden . Wenn Sie dies nicht tun, wird es ignoriert.


3
Vielen Dank für die Warnung bezüglich des Stylesheets, dies verursachte Probleme und ich kenne jetzt den Grund!
eMRe

Ja, anfangs durch Platzierung überfallen. Vielen Dank für das Hinzufügen.
John Moylan

Danke das war sehr hilfreich. Sie haben ein Gruppenrichtlinienobjekt, das die effektive IE-Stufe auf 7 setzt, obwohl IE 11 installiert ist. Dies ersparte mir, einige Unterlegscheiben auf der Baustelle anbringen zu müssen, damit die js funktionieren.
Charles Owen

28

Ich glaube, das wird den Trick machen:

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

28

Wie in dieser Antwort auf eine verwandte Frage vorgeschlagen, kann der "Kanten" -Modus in der Datei Web.Config festgelegt werden. Dadurch wird es auf den gesamten von der Anwendung zurückgegebenen HTML-Code angewendet, ohne dass er in einzelne Seiten eingefügt werden muss:

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

Der gleiche Schritt kann auch ausgeführt werden, indem die "HTTP-Antwortheader" mit IIS Manager für den IIS-Server, die gesamte Website oder bestimmte Anwendungen geändert werden.


19

Die Meta-Tag-Lösung funktionierte bei uns nicht, aber das Festlegen im Antwortheader hat Folgendes bewirkt:

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

3
+1 für 'chrome = 1'; Das wusste ich nie. Für das, was es wert ist, hat das Ändern auf IE = 10 eine Reihe von Rendering-Problemen auf meiner Site behoben, auf die IE = Edge keinen Einfluss hatte.

Erläuterung der chrome=1Eigenschaft: stackoverflow.com/a/22059516/368691 . Bedenken Sie jedoch, dass Chrome Frame in den Ruhestand versetzt wurde. blog.chromium.org/2013/06/retiring-chrome-frame.html
Gajus

1
Kommentare zu anderen Antworten anzeigen ... Ich habe festgestellt, dass dies NICHT funktioniert, wenn der Benutzer (oder der Systemadministrator) den Kompatibilitätsmodus standardmäßig aktiviert hat, indem Sie zu Extras-> Einstellungen für die Kompatibilitätsansicht gehen und die Option Alle Websites in der Kompatibilitätsansicht anzeigen aktivieren . speedplane 19. April 13 um 11:29 7 Das Kompatibilitäts-Meta-Tag MUSS das erste Meta-Tag sein, und es können KEINE IE-bedingten Anweisungen vor dem Tag sein. Mehr: tesmond.blogspot.com/2011/10/… - Chris Sobolewski 19. August 13 um 20:23
felickz

Ich habe versucht, es in die erste Zeile der Layoutseite zu setzen. Es funktioniert nicht, Stu erwähnte das Ändern der IIS-HTTP-Antwortheader. Ich habe es versucht. Ich habe den App-Pool neu gestartet. Ich inspiziere mehr. Diese Seite wird unter einer anderen Seite verschachtelt. Die andere Seite hat ein anderes Meta. Dies ist die Produktionswebsite. So viele Leute greifen auf diese Seite zu. Das Anbringen dieses Tags ist unmöglich. Jede andere Lösung oder ich bin Schraube
Benutzer12345

10

Nur noch ein paar Anmerkungen zu diesem Thema, basierend auf meinen jüngsten Erfahrungen. Die Universität, an der ich arbeite, gibt Laptops mit IE 8 heraus, die für alle Intranetsites auf den Kompatibilitätsmodus eingestellt sind. Ich habe versucht, das Meta-Tag hinzuzufügen, um diesen Modus für Seiten zu deaktivieren, die von meiner Site bereitgestellt werden, aber der IE hat dieses Tag konsequent ignoriert. Wie Lance in seinem Beitrag erwähnt hat, wurde dieses Problem durch Hinzufügen eines Antwortheaders behoben. So setze ich den Header basierend auf der HTML5-Boilerplate-Methode:

<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>

Damit dieser Header tatsächlich gesendet wird, müssen Sie sicherstellen, dass mod_headers in Apache aktiviert ist. Wenn du sicherstellen willst, dass du diesen Mod aktiviert hast, lege dies auf eine Seite, auf der PHP ausgeführt werden kann:

<pre>
<?php
    print_r(apache_get_modules());
?>
</pre>

Die .htaccess-Methode hat bei mir in IE8 + funktioniert. Sie hat die Kompatibilitätsschaltfläche (auch bekannt als Enemy No. 1) entfernt und IE8 gezwungen, die Verwendung des Kompatibilitätsmodus zu vermeiden. Verwandte: Die Meta-Tag-Alternative scheint nur unter bestimmten Bedingungen (IE Voodoo) auf verschiedenen Computern zu funktionieren.
William Isted

10

IE8 verwendet standardmäßig den Standardmodus für das intERnet und den Quirks-Modus für das intRAnet. Das HTML-Meta-Tag wird ignoriert, wenn Sie den Doctype auf xhtml Transitional gesetzt haben. Die Lösung besteht darin, dem Code einen HTTP-Header hinzuzufügen. Das hat bei uns funktioniert. Jetzt zwingt unsere Intranetseite IE8, die App im Standardmodus zu rendern.

Zu PageInit der Basisseitenklasse (ASP.net C #) hinzugefügt:

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

Referenz: http://ilia.ws/archives/196-IE8-X-UA-Compatible-Rant.html


3

Dies liegt an der Einstellung in den IE-Kompatibilitätseinstellungen, die besagt, dass alle Intranetsites im Kompatibilitätsmodus ausgeführt werden sollen. Sie können dies über eine Gruppenrichtlinie deaktivieren (oder einfach im IE deaktivieren) oder Folgendes festlegen:

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

Anscheinend ist es nicht möglich, die Einstellungen der Kompatibilitätsansicht als Gruppenrichtlinie zu ändern, aber es ist etwas, das möglicherweise in der Registrierung geändert werden kann. Dieses Meta-Tag funktioniert gut für mich. Ich musste das erforderliche Attribut als Teil eines HTML-Formulars verwenden Es funktionierte in Chrome und Firefox, aber nicht in IE.

Hier ist ein schönes Bild davon, welche Browser jedes einzelne HTML 5-Element unterstützen.

http://html5readiness.com/

Beachten Sie den einen gemeinsamen Nenner Google Chrome, der alles unterstützt. Hoffe das ist hilfreich


Es sieht so aus, als ob Firefox und IE 10 jetzt auch alles unterstützen. Chart macht das nicht so deutlich wie bei Chrome.
Tony L.

0

Als erstes Element unter dem Tag einfügen.

Dies zwingt den IE, die Seite in der physischen Version des IE zu rendern, und ignoriert die "Moduseinstellung" des Browsers. Dies kann in den Entwicklertools festgelegt werden. Versuchen Sie, es zum Testen auf eine ältere Version des IE zu ändern. Dies sollte ignoriert werden und die Seite sollte genau gleich aussehen.


0

Wenn Sie Zugriff auf den Server haben, können Sie dies am zuverlässigsten auf dem Server selbst in IIS tun. Wechseln Sie zu den IIS-HTTP-Antwortheadern. Name hinzufügen: X-UA-kompatibel
Wert: IE = edge Dies überschreibt Ihren Browser und Ihren Code.


Dies wird bei einer neuen Bereitstellung in IIS zurückgesetzt, wenn dies auf Website-Ebene festgelegt wurde
Eman Pitts

0

Wenn Sie möchten, dass jede einzelne Webseite den ausgewählten Inhalt lädt und asp.net verwendet. Wenden Sie es einfach als erstes Tag unter dem Überschriften-Tag in Ansichten> freigegeben> Layout.cshtml an

Nur ein Hinweis

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.