webentwicklung-frage-antwort-db.com.de

X-UA-Compatible ist auf IE = Edge gesetzt, der Compatibility-Modus wird jedoch nicht angehalten

Ich bin ziemlich verwirrt Ich sollte einstellen können 

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

und IE8 und IE9 sollten die Seite mit der neuesten Rendering-Engine rendern. Ich habe es jedoch gerade getestet, und wenn der Kompatibilitätsmodus an anderer Stelle auf unserer Website aktiviert ist, bleibt er für unsere Seite aktiv, auch wenn wir ihn dazu zwingen sollten. 

Wie sollen Sie sicherstellen, dass IE den Kompatibilitätsmodus (auch in einem Intranet) verwendet nicht?

FWIW, ich verwende die HTML5-DocType-Deklaration (<!doctype html>).

Hier sind die ersten Zeilen der Seite:

<!doctype html> 
<!--[if lt IE 7 ]> <html lang="en" class="innerpage no-js ie6"> <![endif]--> 
<!--[if IE 7 ]>    <html lang="en" class="innerpage no-js ie7"> <![endif]--> 
<!--[if IE 8 ]>    <html lang="en" class="innerpage no-js ie8"> <![endif]--> 
<!--[if (gte IE 9)|!(IE)]><!--> 
<html lang="en" class="innerpage no-js"> 
<!--<![endif]--> 
    <head> 
        <meta charset="ISO-8859-1" /> 
        <meta http-equiv="X-UA-Compatible" content="IE=Edge" /> 

BEARBEITEN: Ich habe gerade gelernt , dass die Standardeinstellung für den IE8 ist, den IE7-Kompatibilitätsmodus für Intranetsites zu verwenden. Würde dies das X-UA-kompatible Meta-Tag überschreiben?

243
Kerrick

Wenn Sie die Einstellungen für die Kompatibilitätsansicht von IE für Intranetsites überschreiben müssen, können Sie dies in der Datei web.config (IIS7) oder in den benutzerdefinierten HTTP-Headern in den Eigenschaften der Website (IIS6) tun und dort X-UA-kompatibel einstellen . Das Meta-Tag überschreibt nicht die Intranet-Einstellung des IE in den Einstellungen für die Kompatibilitätsansicht. Wenn Sie es jedoch auf dem Hosting-Server festlegen, wird die Kompatibilität überschrieben.

Beispiel für web.config in IIS7:

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

Edit: Ich habe den clear-Code unmittelbar vor der add entfernt. Es war ein unnötiges Versehen durch Kopieren und Einfügen. Guter Fang, Kommentatoren!

257
Tim Franklin

Server-Side-Lösung ist die empfohlene Lösung, wie @TimmyFranks in seiner Antwort vorschlägt. Wenn Sie jedoch die X-UA-Compatible-Regel auf Seitenebene implementieren müssen, lesen Sie bitte die folgenden Tipps, um von den Erfahrungen derjenigen zu profitieren, die bereits erhalten haben verbrannt


Das X-UA-Compatible-Meta-Tag must wird direkt nach dem Titel im <head>-Element angezeigt. Es können keine anderen Meta-Tags, CSS-Links und JS-Skriptaufrufe davor platziert werden.

<head>
    <title>Site Title</title>
    <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
    <meta charset="utf-8">
    <script type="text/javascript" src="/jsFile.js"></script>
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <link rel="Apple-touch-icon" href="/Apple-touch-icon.png" />
    <link rel="shortcut icon" href="/Apple-touch-icon.png" />
</head>

Wenn bedingte Kommentare auf der Seite vorhanden sind (beispielsweise im <html>), müssen diese nach dem <head> untergelegt werden.

// DON'T: place class inside the HTML tag 
<!--[if gt IE 8]><!--> 
    <html class="aboveIe8"> 
<!--<![endif]-->

// DO: place the class inside the BODY tag
<!--[if gt IE 8]><!--> 
    <body class="aboveIe8"> 
<!--<![endif]-->

Das Team von Html5BoilerPlate schrieb über diesen Fehler - http://h5bp.com/i/378 .__ Sie haben mehrere Lösungen.

In der Intranet- und Kompatibilitätsansicht gibt es Einstellungen, wenn Sie zu Tools> Kompatibilitätsansicht gehen.

Compatibility view settings

180
neoswf

Wenn Sie es von PHP aus bereitstellen, können Sie auch den folgenden Code verwenden, um es zu beheben.

header("X-UA-Compatible: IE=Edge");
38
tj111

Wie sich herausgestellt hat, hat dies mit der "intelligenten" Entscheidung von Microsoft zu tun , um alle Intranetseiten in den Kompatibilitätsmodus zu zwingen, selbst wenn X-UA-Compatible auf IE=Edge eingestellt ist.

24
Kerrick

Ich habe auch die gleiche Ausgabe von IE9-Rendering in IE7-Dokumentstandards für lokale Host . Ich habe viele bedingte Kommentar-Tags versucht, aber nicht erfolgreich . Am Ende entfernte ich alle bedingten Tags und fügte direkt nach dem Kopf Meta-Tags hinzu unten und es funktionierte wie charmant.

<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">

Ich hoffe es hilft

9
Pramod

Selbst wenn Sie die Option "Intranetseiten in der Kompatibilitätsansicht anzeigen" nicht aktiviert haben und X-UA-Kompatibel in Ihren Antwortheatern haben, gibt es einen anderen Grund dafür, dass Ihr Browser sowieso "Kompatibilitätsansicht" verwendet - Ihre Gruppenrichtlinie. Schauen Sie in Ihrer Konsole nach folgender Meldung:

HTML1203: xxx.xxx wurde für die Ausführung in der Kompatibilitätsansicht über Gruppenrichtlinien konfiguriert. 

Dabei ist xxx.xxx die Domäne für Ihre Site (d. H. Test.com). Wenn Sie dies sehen, wird die Gruppenrichtlinie für Ihre Domäne so festgelegt, dass Websites, die auf test.com enden, automatisch im Kompatibilitätsmodus gerendert werden, unabhängig von Doctype, Kopfzeilen usw.

Weitere Informationen finden Sie unter dem folgenden Link (erläutert die HTML-Codes): http://msdn.Microsoft.com/en-us/library/ie/hh180764(v=vs.85).aspx

6
rshadman

Wie NEOSWF oben erläutert, verhindern die bedingten Kommentare von Paul Irish, dass das Meta-Tag keine Auswirkungen hat.

Hier gibt es mehrere Korrekturen ( http://nicolasgallagher.com/better-conditional-classnames-for-hack-free-css/ )

Diese schließen ein:

Hinzufügen von zwei HTML-Klassen, Verwenden von Serverheatern und Hinzufügen eines bedingten Kommentars über dem Doctype.

Bei meinem letzten Projekt habe ich mich entschlossen, die bedingten Kommentare von Paul Irish zu streichen. Ich mochte die Idee nicht, etwas vor dem HTML-Code hinzuzufügen, ohne vorher LOTS-Tests durchzuführen, und es ist schön zu sehen, was nur durch das Betrachten des HTML-Codes festgelegt wurde.

Am Ende habe ich ein div direkt nach dem Körper umgeben und bedingte Kommentare verwendet, zB

  <!--[if IE 7]><div class="ie7"><!--<![endif]-->
  ... regular body stuff
  <!--[if IE 7]></div><!--<![endif]-->

Ich hätte dies rund um den Körper tun können, aber mit CMSs wie Wordpress ist es schwieriger. 

Natürlich ist es ein weiteres DIV im Markup, aber nur für ältere Browser.

Ich denke, es könnte jedoch eine Entscheidung für jedes Projekt sein.

Ich habe auch etwas über das charset-Meta-Tag gelesen, das in den ersten 1024 Bytes eingegeben werden muss.

Manchmal sind die einfachsten und am einfachsten zu lesenden Ideen die besten und es ist auf jeden Fall eine Überlegung wert! Vielen Dank an den 6. Kommentar zu diesem Link.

5
user1010892

X-UA-Compatible überschreibt nur den Dokumentmodus, nicht den Browsermodus, und funktioniert nicht für alle Intranetsites. In diesem Fall ist es die beste Lösung, "Intranetsites in der Kompatibilitätsansicht anzeigen" zu deaktivieren und Gruppenrichtlinieneinstellungen festzulegen , um anzugeben, welche Intranetsites den Kompatibilitätsmodus benötigen.

5
Tony

Ich habe meiner Htaccess-Datei Folgendes hinzugefügt:

BrowserMatch MSIE ie
Header set X-UA-Compatible "IE=Edge,chrome=1" env=ie
5
Metzed

Darüber hinaus muss X-UA-Compatible das erste Meta-Tag im Kopfbereich sein

<head>
    <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
</head>

Übrigens sind die korrekte Reihenfolge oder die Hauptkopf-Tags:

<head>
    <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
    <meta charset="utf-8">
    <title>Site Title</title>
    <!-- other tags -->
</head>

Diesen Weg 

  1. wir setzen die Render-Engine so, dass sie verwendet wird, bevor der IExplorer verarbeitet wird
  2. im Dokument legen wir dann die Kodierung für alle Browser fest 
  3. dann drucken wir den Titel aus, der mit der bereits definierten Kodierung verarbeitet wird.
3
Leonardo Molina

Für Nginx

add_header "X-UA-Compatible" "IE=Edge,chrome=1";

ref: https://github.com/h5bp/server-configs/commit/a5b0a8f736d68f7de27cdcb202e32975a74bd2c5

2
z2z

In IE 11 können Sie die Browserkompatibilitätsansicht nicht mehr überschreiben, indem Sie den Header senden ...

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

Die einzige Möglichkeit, den Browser dazu zu zwingen, die Kompatibilitätsansicht nicht zu verwenden, besteht darin, den Benutzer in seinem Browser zu deaktivieren. Unsere ist eine Intranetsite und die Standardoption IE ist die Verwendung der Kompatibilitätsansicht für Intranetsites. Was für ein Schmerz!

Wir konnten verhindern, dass Benutzer ihre Browsereinstellungen für Benutzer von IE 9 und 10 ändern müssen, aber in IE 11 funktioniert dies nicht mehr. Unsere IE - Benutzer wechseln zu Chrome, wo dies kein Problem ist und war es noch nie.

1
EricP

Timmy Franks hatte es richtig für mich. Wir hatten gerade das Problem, dass der Kunde IE8 im gesamten Unternehmen hatte, und erzwang die Website, die wir für ihr Intranet geschrieben haben, in den Kompatibilitätsmodus. Die Einstellung von "IE-Edge" schien das Problem zu beheben.

<httpProtocol>
  <customHeaders>
    <clear />
    <add name="X-UA-Compatible" value="IE=Edge" />
  </customHeaders>
</httpProtocol>
1
SouthShoreAK

Ich war in der Lage, das Laden der Header vor PHP mit PHP zu umgehen, und es hat sehr gut funktioniert.

<?php 
header( 'X-UA-Compatible: IE=Edge,chrome=1' );
header( 'content: width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no' );
include('ix.html');
?> 

ix.html ist der Inhalt, den ich nach dem Senden der Header laden wollte.

1
user3071843

Wenn Sie einen LAMP-Stapel verwenden, fügen Sie dies Ihrer .htaccess-Datei in Ihrem Webstammordner hinzu. Sie müssen es nicht jeder PHP -Datei hinzufügen.

<IfModule mod_headers.c>
    Header add X-UA-Compatible "IE=Edge"
</IfModule>
0
Kevin Smith

Ich hatte das gleiche Problem, nachdem ich viele Kombinationen ausprobiert hatte. Ich hatte diese Funktion 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
<head runat="server">
0
capadleman

Ich hatte das gleiche Problem in IE11. Keine dieser Antworten löste mein Problem. Nachdem ich ein wenig gegraben hatte, fiel mir auf, dass der Browser im Modus Enterprise lief. (Bestätigen Sie mit F12, und klicken Sie auf die Registerkarte Emulation. Suchen Sie nach dem Dropdown-Menü des Browserprofils.) Die Einstellung wurde gesperrt, sodass ich die Einstellung nicht ändern konnte.

Ich konnte das Profil in Desktop ändern, nachdem ich CurrentVersion aus dem folgenden Registrierungsschlüssel gelöscht hatte:

HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer\Main\EnterpriseMode

Nachdem Sie den Modus in Desktop geändert haben, funktionieren die Antworten in diesem Beitrag.

0
jfatal

Wenn Ihr Browser mit Kompatibilitätsmodi geöffnet wird, können Sie versuchen, den Registrierungsschlüssel zu deaktivieren, selbst wenn Sie alle Konfigurationsmodule für den Kompatibilitätsmodus aus Ihrem Webbrowser und dem Editor für lokale Gruppenrichtlinien entfernen und deaktivieren.

Dies geschieht auch bei der Verwendung von Domäne und Subdomäne, um die Serverseite zu verbinden. Die Maschine kann nur im Kompatibilitätsmodus für alle Unterdomänen geöffnet werden.

DISABLE COMPABILITY MODE FÜR INTRANET

HKEY_LOCAL_MACHINE - SOFTWARE - Richtlinien - Microsoft - Internet Explorer - BrowserEmulation -> IntranetCompalityMode Der Wert sollte 0 (Null) sein. Entfernen Sie auch den vorhandenen Domänennamen aus der Richtlinienliste.

Andernfalls können Sie einen neuen Wert (DWORD) hinzufügen, der 0 (Null) - Wertdaten enthält.

0
ayciceksamet