IE8/9/10/11: Compatibility View–Wie kann manuell, serverbasiert oder per Policy das Verhalten beeinflusst werden?


Update: auch hier ist der Inhalt nach wie vor relevant und wurde von mir bis IE11 erweitert.
Update2: Für eine nahezu 100%ige Kompatibilität zu IE8 sollte sich jeder den Enterprise Mode for Internet Explorer 11 anschauen, da dies viele Probleme und Roadblocks beseitigt!

Der Kompatibilitätsmodus wurde für den Internet Explorer 8 eingeführt, damit existierende, für IE7 erstellte Webseiten ohne Aufwand/Veränderungen weiterbetrieben werden können.

Das zu wissen beruhigt, aber ohne zu wissen, wie dieses Feature effektiv konfiguriert werden kann, hilft das Wissen über die Existenz wenig.

 

Manuelle Konfiguration

Für den “Otto-Normal” User bieten sich zwei Möglichkeiten den Kompatibilitätsmodus (dauerhaft) zu aktivieren:

  1. Das GUI (Extras->Einstellungen der Kompatibilitätsansicht / Tools->Compatibility View Settings)

    image
  2. Der Kompatibilitätsansichtsbutton in der Adresszeile (nur bis IE10 einschl.)

    image image

Für den erfahrenen User bietet sich noch eine andere Möglichkeit kurzfristig/flüchtig das Rendering zu beeinflussen:

Die Developer Tools (F12 oder Extras->Entwicklertools / Tools->Developer Tools):

image

image

image

Programmatische Konfiguration

 

Natürlich kann es auch für Programmierer und Applikations/Serverbetreiber notwendig sein, diese Settings für ihre Seite/Applikation vorzugeben.

Auch hierfür stehen zwei Möglichkeiten zur Verfügung (nach Prioritäten geordnet ):

  • “Per Page”
    Die “Per Page” Einstellung hat die höchste Priorität. Der Meta-Tag Eintrag muss an erster Stelle innerhalb des Header Tags stehen.

    Folgende Varianten sind möglich:
  1. <meta http-equiv="X-UA-Compatible" content="IE=5"/>
    Dies ist die einzigste Möglichkeit den IE8 alle Seiten im sog. “Quirks Mode” darstellen zu lassen. Die Angabe über den <meta …> Tag hat die höchste Priorität. D.h. selbst wenn ein !DOCTYPE angegeben wurde, wird dieser ignoriert.
  2. <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"/>
    Sofern ein gültiger DOCTYPE existiert wird die Seite im “IE7 Standards mode” dargestellt.
  3. <meta http-equiv="X-UA-Compatible" content="IE=7"/>
    Die seite wird immer im “IE7 Standards mode” dargestellt, auch wenn kein “!DOCTYPE” vorhanden ist
  4. <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8"/>
    Sofern ein gültiger DOCTYPE existiert wird die Seite im “IE8 Standards mode” dargestellt.
  5. <meta http-equiv="X-UA-Compatible" content="IE=8"/>
    Die Seite wird immer im “IE8 Standards mode” dargestellt, auch wenn kein “!DOCTYPE” vorhanden ist
  6. <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9"/>
    Sofern ein gültiger DOCTYPE existiert wird die Seite im “IE9 Standards mode” dargestellt.
  7. <meta http-equiv="X-UA-Compatible" content="IE=9"/>
    Die Seite wird immer im “IE9 Standards mode” dargestellt, auch wenn kein “!DOCTYPE” vorhanden ist
  8. <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE10"/>
    Sofern ein gültiger DOCTYPE existiert wird die Seite im “IE10 Standards mode” dargestellt.
  9. <meta http-equiv="X-UA-Compatible" content="IE=10"/>
    Die Seite wird immer im “IE10 Standards mode” dargestellt, auch wenn kein “!DOCTYPE” vorhanden ist
  10. <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE11"/>
    Sofern ein gültiger DOCTYPE existiert wird die Seite im “IE11 Standards mode” dargestellt.
  11. <meta http-equiv="X-UA-Compatible" content="IE=11"/>
    Die Seite wird immer im “IE11 Standards mode” dargestellt, auch wenn kein “!DOCTYPE” vorhanden ist
  12. <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
    Bei dieser Einstellung wird die aktuellste Version der Rendering Engine verwendet. Hierbei ist es unerheblich ob ein “!DOCTYPE” angegeben wurde oder nicht. Die Funktionsweise ist also vergleichbar mit “IE=7” und “IE=8”. Verwendet wird dies um eine Kompatibilität zu neuen IE Versionen wie z.B. IE9 herstellen zu können.

    Diese Notation wird voraussichtlich entsprechend für die nächsten IE Versionen gelten.
    VGL.: X-UA-Compatibility Meta Tag and HTTP Response Header
  • “Per Site”
    Die “Per Site” Einstellung hat eine höhere Priorität als eine “!DOCTYPE” Angabe, Unterliegt allerdings der “Per Page” Einstellung.

    Im Prinzip muss der Web Server einen Header “X-UA-Compatible” mitschicken. Der Wert entspricht den Angaben wie bei “Per Page”, also “5”,”EmulateIE7”,”7”,”EmulateIE8”,”8”, “EmulateIE9”, “9” , “EmulateIE10”, “10” , “EmulateIE11", “11” und “edge”.

    Bei Verwendung eines IIS mittels web.config: http://msdn.microsoft.com/en-us/library/cc817572.aspx
    Bei Verwendung eines Apaches: http://msdn.microsoft.com/en-us/library/cc817573.aspx

    VGL: http://msdn.microsoft.com/library/cc817574.aspx
     

  • "Per DOCTYPE"
    Anhand des DOCTYPEs wählt der IE den entsprechenden Modus. Wird kein “!DOCTYPE” angegeben wählt der IE automatisch den “Quirks Mode” , sofern ihm dieser nicht durch ein anderes Setting vorgegeben worden ist

Zu beachten gilt :

  1. Bei der Verwendung des META Tags oder bei dem Hinzufügen des entsprechenden HTTP Headers wird der “Version Vektor” des IE8 nicht beeinflusst. Dies bedeutet, dass sich der IE8 auch immer als solcher identifizieren wird obwohl u.U. “IE=EmulateIE7” verwendet wurde. Der Grund dafür ist die Tatsache, dass “Version Vektor” erst nach dem Laden des Haupt-Dokuments geändert werden kann. Dies könnte ggf. zu Problemen mit der Web Applikation führen.
  2. Es ist nicht möglich den in den Developer Tools sichtbaren “Internet Explorer 7” Browser Mode per “!DOCTYPE” oder “X-UA-Compatible” Flag auszuwählen. Der einzige Unterschied zwischen dem Browser Mode “Internet Explorer 7” und “Internet Explorer 8 Compatibility View” ist der Eintrag “Trident/4.0” im User Agent String des Browser beim Senden einer HTTP Anfrage. Dies dient lediglich zu Testzwecken für den Fall, dass ein Web Server auf den “Version Vector” reagieren sollte.
  3. Es ist nicht möglich einen IE6 Standards Mode zu simulieren. Zu Zeiten von IE6 wurde meistens der Quirks Mode verwendet.

Administrative Verwaltung

Last but not least gibt es natürlich auch die Möglichkeit das Verhalten mittels einer Group Policy vorzugeben:

Use Policy list of Internet Explorer 7 sites (Maschine)

Use Policy list of Internet Explorer 7 sites (User)

image

Wichtig bei der Verwendung der Policy sind folgende Dinge:

  1. IE8: Es müssen Domainnamen und nicht Server oder Subdomainnamen angegeben werden, sprich “microsoft.com” anstelle von “www.microsoft.com”
  2. IE9/..: Es müssen Domainnamen oder Subdomainnamen angegeben werden, sprich “microsoft.com” oder "www.microsoft.com"
  3. Es darf kein abschließender Slash “/” benutzt werden, sprich “microsoft.com” anstelle von “microsoft.com/” 
  4. Die Konfigurierten Settings werden angewendet, aber sind nicht im GUI des Users sichtbar

FYI: Die konfigurierte Liste landet in folgendem Registrykey:
HKCU\Software\Policies\Microsoft\Internet Explorer\BrowserEmulation\Policylist
und enthält pro konfigurierter Domain einen REG_SZ Wert:

image

(Anmerkung: die Usersettings über das GUI werden anders gespeichert. Da eine manuelle Änderung hier nicht supportet ist, werden wir darauf nicht näher eingehen.)

 

 

Links

http://blogs.msdn.com/b/askie/
http://blogs.msdn.com/b/ie/archive/2008/08/27/introducing-compatibility-view.aspx  
http://blogs.msdn.com/b/mikeormond/archive/2008/09/25/ie-8-compatibility-meta-tags-http-headers-user-agent-strings-etc-etc.aspx
http://blogs.msdn.com/b/ie/archive/2010/06/16/ie-s-compatibility-features-for-site-developers.aspx
http://gpsearch.azurewebsites.net/Default.aspx?PolicyID=1807

Comments (23)

  1. Anonymous says:

    Hallo Herr Lengsfeld,
    seit IE9 funktioniert dies auch mit Subdomänen. Ich habe den Post entsprechend angepasst. Danke für den Hinweis.

  2. Anonymous says:

    Hallo Stefan Andres,
    nein, der Kompatibilitätsmodus sollte keine dauerhafte Lösung sein (auch wenn manche Webseiten das so betreiben). Die dauerhafte Lösung sollte sein die Anwendungen in Zukunft standardkonform zu bauen, sprich auf verabschiedete HTML4/5 Standards zu setzen.

    Unser Commitment ist, dass eine Webseite, die den W3C Validator Check (HTML+CSS) ohne Fehler besteht, auch korrekt dargestellt wird.
    Uns ist daran gelegen, dass eine Webseite keinerlei "Sonderbehandlung" für einen Browser benötigen sollte. Aus dem Grund wurde z.B. auch das UserAgent Verhalten des IE11 im Standards Modus verändert.
    D.h. auch beim Zukauf von Anwendungen sollte darauf geachtet werden, dass diese Standardkonform sind, um sich selber den "Schmerz" für zukünftige Versionen zu ersparen.
    VG
    Stephanus

  3. Anonymous says:

    Die Policy funktioniert noch und auch die Updates werden noch gepflegt. Insb. weil sich mit der Zeit die Webseiten auf der Liste weiterentwickeln und ggf. gar nicht mehr auf der Liste verbleiben wollen.
    VG
    Stephanus

  4. Anonymous says:

    Die Regel dazu ist: das granularste/speziellste Setting gewinnt.
    Beispiel: Seite ist in local Intranet und es ist konfiguriert dies in IE7mode zu nutzen, der Server sendet den http Header für "compatibleIE8" und die Seite hat den Meta Header "edge", dann wird das Setting der Seite (also Edge) verwendet, obwohl die beiden
    anderen Settings auch zutreffend wären, aber eben von dem speziellsten Setting überschrieben werden.
    Hoffe das ist so klar geworden.

  5. Anonymous says:

    @Joel: Es gibt den Wert in beiden Registry Bereichen, also sowohl Maschinen als auch User basiert! Da es hier nur "an" oder "nicht vorhanden" gibt, kommen sich die Settings auch nicht in die Quere. D.h. wenn ein Eintrag in einem der beiden Bereiche vorhanden ist, dann wird diese Webseite entsprechend im Compat Mode angezeigt. Ich habe im Artikel den Link auf die HKCU Policy noch ergänzt, danke für den Hinweis.

  6. Anonymous says:

    Im IE11 (Windows 8.1/U1) konnte ich das nicht nachstellen. Es war immer angedacht, dass dies nicht für Directories funktionieren sollte. Wenn es im IE9 tatsächlich unterstützt worden war, dann war dies außerhalb der Spezifikation und ist damit auch weiterhin
    "nicht supportet".
    VG
    Stephanus

  7. Anonymous says:

    Hallo Duke,
    sorry für die Verwirrung, Subdomain ist hier bitte als FQDN zu werten der natürlich einzelne Servernamen einschließt. Der Einfachheit halber hatte ich nur von Subdomains gesprochen und nicht FQD explizit erwähnt. Wichtig: das gilt nur für IE 9 oder höher.

    VG
    Stephanus

  8. Anonymous says:

    Hallo Stefan K,
    da die Regel gilt, dass der resultierende DocMode aus der speziellsten die Anordnung ermittelt wird, kann über die obigen Mechanismen auch gesteuert werden, dass eine Subdomäne im Compatmode / IE7 Modus läuft, alle anderen Subdomänen und die TLD aber nicht.
    Ziel sollte sein, dass möglichst wenig Einträge in solchen Listen vorhanden sind und dass nach Möglichkeit alle Seiten im EDGE Modus betrieben werden können!

    VG
    Stephanus

  9. Joel says:

    Klasse Artikel! Vielen, vielen Dank! Hat mir bei einem aktuellen Problem wunderbar unterstützt.

    Kleine Anmerkung allerdings: Der Registrykey liegt unter HKLM, nicht HKCU.

  10. Giovanni Grimone says:

    Kompliment für den durchaus poetischen Satz:

    "Das zu wissen beruhigt, aber ohne zu wissen, wie dieses Feature effektiv konfiguriert werden kann, hilft das Wissen über die Existenz wenig."

    🙂

  11. Matthias Lengsfeld says:

    eine Rückfrage zur administrativen Verwaltung "Es müssen Domainnamen und nicht Server oder Subdomainnamen angegeben werden, sprich “microsoft.com” habe ich:

    Ist das wirklich so?

    Im Test ist mir aufgefallen, dass hierbei sehr wohl die Syntax "server.domain.de" akzeptiert und auch unterschieden wird.

    –> Server.domain.de läuft im kompatiblen Modus,

    –> Domain.de weiterhin nativ.

    Testumgebung war Windows 8 mit Internet Explorer 10 (Patchstand November 2013)

  12. Manfred Gold says:

    noch eine Rückfrage: funktioniert die Policy "Include updated website lists from Microsoft" (MSCompatibilityMode=1) noch und gibt es weiterhin Updates? wo?

  13. Anonymous says:

    Pingback from IE11: Intranetseiten werden nicht korrekt dargestellt | Adlerweb

  14. Stefan Andres says:

    Ist der Kompatibilitätsmodus auf Dauer eine Lösung für eine Webseite? Gibt es hierbei keine Einschränkungen auf Performance oder Funktionalität? Oder sollte eine Webseite nicht besser an IE 10 "angepasst" werden?

  15. Manfred Gold says:

    Hallo,
    es funktioniert auch test.de/dir (getestet mit IE9):
    alles in *.test.de/dir und darunter wird im Kompatibilitätsmode angezeigt, alles in *.test.de und darunter im IE9-Mode.
    Ist das offiziell unterstützt?

  16. Nur So says:

    Danke für den Artikel!!!!!

  17. Holger says:

    Hallo Herr Schulte,
    Ich vermisse in dem Artikel die Information wie sich Manuelle, Programmtische und Administrative Konfiguration zueinander verhalten. Gibt es hier auch Prioritäten? Wenn eine Gruppenrichtline zum Beispiel intranet.local aufnimmt dann wird diese ja im IE7 Mode
    angezeigt. Die Webseite selber liefert aber ein " " mit aus. Welcher Modus wird dann benutzt?

  18. Duke says:

    Hallo Herr Schulte,
    vielen Dank für die von Ihnen bereitgestellten Informationen.
    Mir ist aufgelfallen, dass Sie nur von Subdomains sprechen wobei ein FQDN hier ebenfalls als Richtlinie zieht.
    (Soweit ich das mit meinen Tests im IE 11 für z.B. SAP Portale und diverse SAP Netweaver Installationen oder z.B. Loadbalancer FQDNs bewerten kann.)
    Bei diesen Systemen ist die Abhängigkeit von eingesetzten Support Packages oder Hinweisen sehr unterschiedlich und für unsere recht große Umgebung die einzige Möglichkeit den Modus zu steuern (halt über den FQDN des jeweiligen Systems).

    Nochmals danke für die Infos.

    Gruß
    Duke

  19. Stefan K. says:

    Für mich ist immer noch nicht klar ob Subdomains verwenden kann.
    kann ich die subdomain > suche.bing.com < in den compability mode schalten (mittels "document mode"?)
    ABER die domain > bing.com < nicht?

  20. ML49448 says:

    Hallo Stefan K.,

    wenn ich in IE 9 und IE11unter Extras->Einstellungen der Kompatibilitätsansicht suche.bing.com eintrage wird beim klick auf hinzufügen die subdomain entfernt und bing.com eingetragen. Wie bekomme ich denn die subdomain rein?

    Danke Ihnen, Michael

  21. ML49448 says:

    sorry, meine Frage grad eben ging an Herr Stephanus Schulte 🙂 VG Michael

  22. Hallo Michael,
    das ist tatsächlich so und auch so gewollt. Wenn es spezieller als nur die gesamt Domain sein soll, dann ist entweder die GPO oder der Enterprise Mode in IE11 zu wählen. Insb. der EMIE lässt sich über den upgedateten Enterprise Mode Site List Manager sehr viel
    granularer einstellbar.
    Für "mal testen" ist ein Wechsel über die F12 Tools der einfachste und schnellste Weg.
    VG
    Stephanus

  23. Anonymous says:

    Update Jul 2015:
    Da wir immer wieder die gleichen Fragen hören, hier die FAQ:
    F: Wir sind