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 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.
Antworten:
<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
.
IE=10
auf 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
.
Tools->Compatibility View Settings
Alle 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
Nach vielen Stunden bei der Fehlerbehebung ... Hier sind einige kurze Highlights, die uns aus den X-UA-Compatible
Dokumenten 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=8
werden 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 content
Attribut 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"
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.
Ich glaube, das wird den Trick machen:
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
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.
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');
chrome=1
Eigenschaft: 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
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>
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
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.
Beachten Sie den einen gemeinsamen Nenner Google Chrome, der alles unterstützt. Hoffe das ist hilfreich
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.
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.
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