web-dev-qa-db-de.com

Überschreiben Sie den Intranet-Kompatibilitätsmodus IE8

Standardmäßig zwingt IE8 Intranet-Websites in den Kompatibilitätsmodus. Ich habe versucht, den Meta-Header in IE8 zu ändern, aber er erkennt den Meta-Header nicht und verwendet nur die Browsereinstellung. Weiß jemand, wie man dies deaktiviert?

200
sanpall

Es ist möglich, den Kompatibilitätsmodus im Intranet zu überschreiben.

Fügen Sie für IIS einfach den folgenden Code zur Datei web.config hinzu. Arbeitete für mich mit IE9.

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

Äquivalent für Apache:

Header set X-UA-Compatible: IE=Edge

Und für Nginx:

add_header "X-UA-Compatible" "IE=Edge";

Und für express.js:

res.set('X-UA-Compatible', 'IE=Edge')
224
Andras Csehi

Michael Irigoyen hat Recht, aber es ist etwas komplizierter ...

wenn Sie das wundervolle Boilerplate von Paul Irish verwenden, haben Sie ungefähr Folgendes:

<!doctype html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
<!--[if IE 7]>    <html class="no-js ie7 oldie" lang="en"> <![endif]-->
<!--[if IE 8]>    <html class="no-js ie8 oldie" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">

Dies funktioniert NICHT wie erwartet und wird in IE in einem Intranet -Umfeld in den Kompatibilitätsmodus versetzt, wenn die Option "Intranetsites in der Kompatibilitätsansicht anzeigen" aktiviert ist. Sie müssen die bedingten IE Kommentare entfernen, um den Intranet-Kompatibilitätsmodus zu verhindern.

Der folgende Code funktioniert also:

<!doctype html>
<html class="no-js" lang="en">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">

Wenn Sie vor der <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"> - Anweisung bedingte IE= Kommentare auslösen, werden Sie in einer Intranet - Umgebung in den Kompatibilitätsmodus versetzt, wenn Sie führen IE9 mit den Standardeinstellungen aus.

UPDATE - ADDITIONAL INFO: Beachten Sie jedoch, dass es einen Trick gibt, mit dem die HTML5-Kochplatte funktioniert:

Fügen Sie einen leeren, bedingten Kommentar vor dem DOCTYPE hinzu. Beachten Sie auch, dass Sie, wenn Sie das tun, auch bedingte Kommentare um den X-UA-Compatible Hinzufügen können. Direktive, so dass die Seite auch HTML5-gültig ist. Also zum Beispiel:

<!--[if HTML5]><![endif]-->
<!doctype html>
<!--[if the boilerplate conditionals goes here<![endif]-->
<head>
<!--[if !HTML5]>
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
<![endif]-->

Ein Blog-Beitrag, der vom ersten Teil dieser Antwort inspiriert wurde , hat mehr Details. Und übrigens: Wie in diesem Blog-Beitrag erwähnt, kann man den bedingten Kommentar vor dem DOCTYPE auch durch einen semi-bedingten ersetzen. Kommentar mit keine Bedingung : <!--[]-->. Also, wie so:

<!--[]-->
<!doctype html>
<!--[if the boilerplate conditionals goes here<![endif]-->
<head>
<!--[if !HTML5]>
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
<![endif]-->

Beachten Sie aber, dass die letztere Variante (<--[]--><!DOCTYPE html>), Wie zB durch diese Antwort auf eine andere Frage erklärt, das bekannte Problem aktiviert, dass es - für Legacy IE Versionen ohne Unterstützung für den X-UA-Compatioble (lies: für IE7 und IE6) - Bringe den Browser in den Quirks-Modus.

84
Andrew

Wenn Sie das Menü "Extras" öffnen und "Einstellungen für die Kompatibilitätsansicht" auswählen, wird in diesem Dialogfeld unten die Einstellung "Intranetsites im Kompatibilitätsmodus anzeigen" angezeigt. Wenn Sie dies deaktivieren, sollte dies das Problem beheben und IE wird den auf dem DOCTYPE basierenden Modus verwenden.

34
PilotBob

Die Antworten auf diese Frage sind in gewissem Maße verwirrend.

Die beste Antwort ist derzeit eine serverseitige Lösung, die ein Flag im HTTP-Header setzt. Einige Kommentare weisen darauf hin, dass eine Lösung mit einem Meta-Tag einfach nicht funktioniert.

Ich denke, dieser Blog-Eintrag bietet einen guten Überblick über die Verwendung von Kompatibilitäts-Metainformationen und funktioniert meiner Erfahrung nach wie folgt: http://blogs.msdn.com/b/cjacks/archive/2012/02/29/ using-x-ua-compatible-to-create-durable-enterprise-web-applications.aspx

Die Haupt-Punkte:

  • das Setzen der Informationen mit einem Meta-Tag und in der Kopfzeile funktioniert
  • Das Meta-Tag hat Vorrang vor dem Header
  • Das Meta-Tag muss das erste Tag sein, um sicherzustellen, dass der Browser die Rendering-Engine nicht vorher anhand von Heuristiken ermittelt

Ein wichtiger Punkt (und ich denke, von diesem Punkt geht viel Verwirrung aus) ist, dass IE hat zwei "Klassen" von Modi:

  1. Der Dokumentmodus
  2. Der Browser-Modus

Der Dokumentmodus bestimmt die Rendering-Engine (wie wird die Webseite gerendert).

Der Browsermodus bestimmt, welche User-Agent-Zeichenfolge IE an Server gesendet wird, welcher Dokumentmodus IE standardmäßig verwendet wird und wie IE wertet Bedingte Kommentare aus.

Weitere Informationen zum Dokumentmodus und zum Browsermodus finden Sie in diesem Artikel: http://blogs.msdn.com/b/ie/archive/2010/06/16/ie-s-compatibility- features-for-site-developers.aspx? Redirected = true

Nach meiner Erfahrung beeinflussen die Kompatibilitäts-Metadaten nur den Dokumentmodus . Wenn Sie sich also auf die Browsererkennung verlassen, hilft Ihnen dies nicht weiter. Wenn Sie die Feature-Erkennung verwenden, sollte dies jedoch der richtige Weg sein.

Daher würde ich empfehlen, das Meta-Tag (auf der HTML-Seite) mit folgender Syntax zu verwenden:

<meta http-equiv="X-UA-Compatible" content="IE=9,10" ></meta>

Hinweis: Geben Sie eine Liste der Browsermodi an, auf die Sie getestet haben.

Der Blog-Beitrag rät auch von der Verwendung von EmulateIEX ab. Hier ein Zitat:

Allerdings finde ich es seltsam, wenn eine Anwendung EmulateIE7 oder EmulateIE8 anfordert. Diese Emulationsmodi sind selbst Entscheidungen. Anstatt also genau zu sagen, was Sie wollen, fragen Sie nach einem von zwei Dingen und bestimmen dann, welches dieser beiden Dinge Sie suchen, indem Sie an einer anderen Stelle im Code nach einem DOCTYPE suchen (und dann versuchen, zu verstehen, ob dieser DOCTYPE Ihnen Standards gibt oder Macken je nach Inhalt - eine andere manchmal verwirrende Aufgabe). Anstatt dies zu tun, ist es meiner Meinung nach wesentlich sinnvoller, direkt anzugeben, was Sie möchten, als eine Antwort zu geben, die selbst eine Frage ist. Wenn Sie IE7-Standards möchten, verwenden Sie IE = 7 und nicht IE = EmulateIE7. (Beachten Sie, dass dies nicht bedeutet, dass Sie keinen DOCTYPE verwenden sollten - das sollten Sie.)

19
stefan.s

Versuchen Sie diesen Metatag:

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

Es sollte den IE8 zwingen, als IE8-Standardmodus zu rendern, auch wenn "Intranetsites in der Kompatibilitätsansicht anzeigen" aktiviert ist (entweder für Intranet oder alle Websites). Ich habe es selbst mit IE 8.0.6 versucht

9
Ala' Alnajjar

Unser Systemadministrator hat dieses Problem behoben, indem er das Kontrollkästchen für unsere Organisation global deaktiviert hat. Benutzer mussten sich nicht einmal abmelden.

enter image description here

7
James Lawruk

Ich habe eine funktionierende Antwort gefunden, mit der die überprüfte Intranet-Kompatibilitätsansicht überschrieben werden kann. Fügen Sie einfach im OnInit-Ereignis Ihrer Seite diese Zeile hinzu (kein Meta oder web.config customHeader erforderlich):

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

Ich konnte den Kompatibilitätsmodus überschreiben, indem ich das Meta-Tag als DAS ERSTE TAG im head-Abschnitt angab, nicht nur das erste Meta-Tag, sondern als und nur als SEHR ERSTES TAG .

Vielen Dank an @ stefan.s, dass Sie mich in Ihrer ausgezeichneten Antwort darauf aufmerksam gemacht haben. Vor dem Lesen hatte ich:

DIESES DID NOT WORK

<head> 
<link rel="stylesheet" type="text/css" href="/qmuat/plugins/editors/jckeditor/typography/typography.php"/>
<meta http-equiv="x-ua-compatible" content="IE=9" >

verschob das Link-Tag aus dem Weg und es funktionierte

DIESE WERKE:

<head><meta http-equiv="x-ua-compatible" content="IE=9" >

Wenn ein IE8-Client auf Kompatibilität eingestellt ist, wird die Seite als IE8-Standardmodus gerendert. Content = 'IE = 9' bedeutet, dass der höchste verfügbare Standard bis einschließlich IE9 verwendet wird.

3
PeteS_UK

Versuchen Sie Folgendes in die Kopfzeile einzufügen:

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

Mit freundlicher Genehmigung Paul Irish HTML5 Boilerplate (aber es funktioniert auch in XHTML Transitional).

3
Gabe

Ich hatte mit diesem Problem zu kämpfen und wollte helfen, eine einzigartige Lösung und einen einzigartigen Einblick zu bieten.

Bestimmte AJAX basierte Frameworks fügen zu Beginn des <head> und dies scheint zu verhindern, dass die etablierte Meta-Tag-Lösung ordnungsgemäß funktioniert. In diesem Fall stellte ich fest, dass das direkte Einfügen in den HTTP-Antwortheader, ähnlich wie bei Andras Csehis Antwort, das Problem lösen wird.

Für diejenigen von uns, die Java Servlets verwenden, ist die Verwendung eines ServletFilter eine gute Möglichkeit, dies zu lösen.

public class EmulateFilter implements Filter {

@Override
public void destroy() {
}

@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
        FilterChain arg2) throws IOException, ServletException {
    HttpServletResponse response = ((HttpServletResponse)arg1);
    response.addHeader("X-UA-Compatible", "IE=8");
    arg2.doFilter(arg0, arg1);
}

@Override
public void init(FilterConfig arg0) throws ServletException {
}

}
1
maple_shaft

Wir können dieses Problem in der Spring-Apache-Tomcat-Umgebung beheben, indem wir der RequestInterceptor-Methode eine einzelne Zeile hinzufügen.

//before the actual handler will be executed
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler)
throws Exception {

// Some logic

// below statement ensures IE trusts the page formatting and will render it acc. to IE 8 standard.
response.addHeader("X-UA-Compatible", "IE=8"); 

return true;
}

Referenz von - So erstellen Sie einen Filter und ändern den Antwortheader Hier erfahren Sie, wie Sie dieses Problem über einen RequestInterceptor (Spring) lösen können.

1
JackSparrow

Für alle anderen, die dies lesen und dies über GPO für alle Benutzer deaktivieren möchten, ist dies die Einstellung:

Computerkonfiguration/Administrative Vorlagen/Windows-Komponenten/Internet Explorer/Kompatibilitätsansicht/Aktivieren Sie den Internet Explorer-Standardmodus für lokales Intranet

obwohl der web.config edit es für mich behoben hat.

0
Schrodo_Baggins

Diese Frage ist ein Duplikat von Browser-Modus "Internet Explorer 8" im Intranet erzwingen .

Die Antworten dort zeigen an, dass es nicht möglich ist, die Kompatibilitätsansicht (auf der Serverseite) zu deaktivieren - https://stackoverflow.com/a/4130343/24267 . Dies scheint sicherlich der Fall zu sein, da keiner der Vorschläge, die ich ausprobiert habe, funktioniert hat. Im IE8 wird der "Browser-Modus" auf die Internet Explorer 8-Kompatibilitätsansicht eingestellt, unabhängig davon, welche Art von X-UA-kompatiblem Header Sie senden.

Ich musste einige spezielle Schritte für IE7 und den Kompatibilitätsmodus ausführen, was dazu führte, dass der Browser mit IE8 gerendert hat, aber gemeldet hat, dass es sich um IE7 handelt. So habe ich meinen Code repariert (ich bin mir bewusst, dass dies ein schrecklicher Hack ist und ich sollte auf Funktionen testen, die keine Browserversionen sind):

 isIE8 = navigator.appVersion.indexOf ("MSIE")! = -1 && parseFloat (navigator.appVersion.split ("MSIE") [1]) == 8; 
 if (! isIE8 && navigator.appVersion.indexOf ("MSIE")! = -1 && parseFloat (navigator.appVersion.split ("MSIE") [1]) == 7 && navigator.appVersion.indexOf ("Trident")! = - 1) {
 // Lügner, dies ist IE8 im Kompatibilitätsmodus. 
 IsIE8 = true; 
} 
0
mhenry1384

Fügen Sie dies in Ihr Seiten-Head-Tag ein (mit Ausrichtung auf die gewünschte IE Version)):

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

Beachten Sie, dass dies NICHT die Tatsache ändert, dass der Browser im Kompatibilitätsmodus anzeigt (als Browsermodus bezeichnet), sondern dass die Seite wird im IE8-Standardmodus gerendert wird . Wenn die Darstellung NOCH nicht Ihren Wünschen entspricht, liegt dies wahrscheinlich daran, dass Sie über Javascript verfügen, das fälschlicherweise die I.E. Ausführung. Lesen Sie den folgenden Blogeintrag , um zu bestimmen, von welcher Eigenschaft Sie die Tastatureingabe ausführen sollen, weil selbst wenn Sie das Meta-X-UA-kompatible Tag festlegen, wird in der Benutzeragentenzeichenfolge immer noch MSIE 7.0 angezeigt.

In meinem Fall musste ich für das Update eine Überprüfung für den IE7-Kompatibilitätsmodus hinzufügen. Ich habe dies mit einem einfachen Javascript-Code gemacht:

                //IE8 and later will have the Word 'trident' in its user agent string.
                if (navigator.userAgent.indexOf("Trident")>-1) { //do something }
0
n00b

Der Kommentar von Stefan S zum Dokumentmodus im Vergleich zum Browsermodus war für mein Problem sehr relevant.

Ich habe die X-UA-Content-Metadaten auf der Seite, aber ich habe die Browserversion clientseitig über navigator.appVersion Getestet. Dieser Test spiegelt nicht die Metadaten wider, da der Browsermodus nicht der Dokumentmodus ist.

Die Antwort für mich war, den document.documentMode So etwas wie zu testen:

function IsIE(n)
{
    if (navigator.appVersion.indexOf("MSIE ") == -1) return false;
    var sDocMode = document.documentMode;
    return (isFinite(sDocMode) && sDocMode==n);
}

Jetzt spiegelt sich mein Meta-X-UA-Content-Tag in meinem Browsertest wider.

Warum tue ich so etwas verpöntes, als den Browser zu testen? Geschwindigkeit. Verschiedene meiner jQuery-Add-Ins, wie z. B. Tablesorter, sind in IE6/7 einfach zu langsam, und ich möchte sie deaktivieren. Ich bin mir nicht sicher, ob das Testen der Browserfunktionen mir dabei helfen kann, das Problem anderweitig zu lösen.

0
Herc

Wenn Sie möchten, dass Ihre Website den Standardmodus IE 8 erzwingt, verwenden Sie dieses Metatag zusammen mit einem gültigen DOCTYPE:

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

Beachten Sie den Wert "EmulateIE8" anstelle des einfachen "IE8".

Laut IE devs sollte dies "Standards DOCTYPEs im IE8-Standardmodus anzeigen; Quirks anzeigen DOCTYPEs im Quirks-Modus. Verwenden Sie dieses Tag, um die Kompatibilitätsansicht auf Client-Computern zu überschreiben und Standards zu IE8-Standards zu erzwingen. "

weitere Informationen zu diesem IE Blogpost: http://blogs.msdn.com/b/ie/archive/2008/08/27/introducing-compatibility-view.aspx

0
ashtonium

Hatte das selbe Problem. Es funktionierte mit

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9" />
0
Sandro