Thomas J. Sebestyen: Kompatibilitätsmodus im Internet Explorer 8

Beitrag lesen

Die Möglichkeiten der Webseitenersteller dem Internet Explorer 8 zu sagen, in welchem Modus er die Webseite anzeigen soll

Hah! Da ist er ja! Der schnellste Browser - zumindest laut seines Herstellers - der Internet Explorer 8.

Mit ihm ist auch eine neue Welle der Fröhlichkeit über die Webseitenersteller übergeschwappt, denn ab jetzt darf man sich auf ein verbessertes Verhalten des neuen Internet Explorers bei der Unterstützung von Standards freuen. Das ist sozusagen die perfekte Welle. Nun ja, fast.
Unzählige Webseiten sind auf die eine oder andere Art für verschiedene Versionen des Internet Explorers hin "optimiert". Der Internet Explorer 8 macht nun einen Strich durch viele solche Optimierungen. Es sei denn, man greift zu:

Dokumentkompatibilitätsmodus

Mit dem Internet Explorer 8 führt Microsoft den Begriff der Dokumentkompatibilitätsmodi ein. Nach dem DOCTYPE-Switch im IE6, bedeutet diese die größte Umstellungen für Webseitenersteller, denn der IE 8 ist in der Standardeinstellung so eingestellt, dass er Webseiten mit den höchstmöglichen Standardkompatibilität anzeigt.

Mithilfe der Dokumentkompatibilitätsmodi kann man aber sowohl auf Basis einzelner Seiten, als auch website-übergreifend festlegen, wie der Internet Explorer 8 die Webseiten darstellen soll.

META-Tags für Dokumentkompatibilität

Für einzelne Webseiten kann ein entsprechendes meta-Element im Kopfbereich der Seite notiert werden. Achtung: dieses Element muss im Header vor allen anderen Elementen stehen. Ausnahme bildet nur das title-Element und andere meta-Elemente

<html>

<head> <title>Website-Titel</title> <meta http-equiv="X-UA-Compatible" content="IE=8" /> </head> <body> <h1>Titel</h1> <p>#seiteninhalt.</p> </body> </html>

Der Internet Explorer 8 akzeptiert für das http-equiv-Attribut den speziellen Wert: X-UA-Compatible (Groß- und Kleinschreibung egal).
Im content-Attribut kann einer oder mehrere der folgenden Werte stehen:

Wert Bedeutung
IE=5 Der Code der Seite wird wie durch den Quirks-Modus von Internet Explorer 7 angezeigt
IE=7 Der Code der Seite wird wie durch den Standards-Modus von Internet Explorer 7 angezeigt, ohne Berücksichtigung der/einer DOCTYPE-Angabe
IE=EmulateIE7 Der Code der Seite wird wie von Internet Explorer 7 angezeigt, jedoch Berücksichtigung der/einer DOCTYPE-Angabe (der standardkonforme Modus wird wie vom IE7 angezeigt und der quirks-mode, wie vom IE 5)
IE=EmulateIE8 Enthält der Webseite eine standardkonforme DOCTYPE-Angabe, wird sie im "IE8" Modus, anderseits im Quirks-Modus (IE5-Modus) dargestellt
IE=8 Der IE8- oder IE8-Standards-Modus. Achtung:dies ist die Standardeinstellung für den Internet Explorer 8![1][2][3]
IE=edge Mit diesem Modus wird der Internet Explorer (8) angewiesen, den höchsten zur Verfügung stehenden Modus zu verwenden. Dieser Modus wird nur für Tests empfohlen.

ad 1)
Wenn der Internet Explorer 8 in einer Webseite keine Meta-Angabe zum X-UA-Compatible-Modus findet, versucht er die DOCTYPE-Angabe auszuwerten. Wenn eine standardkonforme DOCTYPE-Angabe vorhanden ist, schaltet er in dem "IE8-Standards-Modus", sonst in dem IE5-Modus (Quirks-Modus).

ad 2)
Die Benützung einer Meta-Angabe zum X-UA-Compatible-Modus überschreibt die benutzerseitige Einstellungen zu "Kompatibilitätsansicht" im Browser.

ad 3)
Um die von Internet Explorer 8 unterstütze CSS-Eigenschaften (die, die im IE 8 neu sind) verwenden zu können, muss eine Webseite im Modus IE8 oder höher gerendert werden (z.B. durch die Angabe des entsprechenden Meta-Elements)

Es ist möglich auch andere Angaben zum X-UA-Compatible-Modus zu machen, als die oben vorgestellten. In so einem Fall wird der Internet Explorer den nächstmöglichen Modus auswählen.
So z.B. wird ein <meta http-equiv="X-UA-Compatible" content="IE=foo"> als IE5-Modus, ein <meta http-equiv="X-UA-Compatible" content="IE=7.5"> als IE7-Modus und ein <meta http-equiv="X-UA-Compatible" content="IE=9"> als IE8-Modus behandelt.
Um mehrere Modi anzugeben , kann man diese durch Semikolon voneinander trennen: <meta http-equiv="X-UA-Compatible" content="IE=5; IE=8">. Diese Angabe würde den IE7-Modus explizit ausschließen, sofern der verwendete Version des Internet Explorers die Angaben zu mehr als einem Modus unterstützt.

Bedingte Kommentare (Conditional Comments)

Diese funktionieren auch im Internet Explorer 8. Will man nur für diesen oder höheren einen Code schreiben, kann man dies mit <!--[if gte IE 8]> ... code oder Text ...<![endif]--> tun. Natürlich kann man ebenso ein [if gt IE 7] verwenden, dies setzt aber voraus, dass es keine Unterversionen von IE 7 geben wird, bzw. falls doch, dass diese den Code unterstützen.

JavaScript

Für den Internet Explorer 8 hat Microsoft eine neue proprietäre Eigenschaft des document-Objekts, die documentMode, eingeführt. Diese Eigenschaft liefert einen numerischen Wert zurück, der dem Dokumentkompatibilitätsmodus der Seite entspricht.

var IE = null;
if (window.

.navigator.appName == "Microsoft Internet Explorer") { if (document.documentMode) { // Internet Exploter 8 IE = document.documentMode; // documentMode = 8 } else { // Internet Explorer 5-7 IE = 5; //setzt sozusagen den Quirks-Modus if (document.compatMode) { if (document.compatMode == "CSS1Compat") IE = 7; // IE7 Modus } } } }

Achtung:Die die mit dem Internet Explorer 6 eingeführte Eigenschaft compatMode wurde zu Gunsten documentMode verworfen. Scripte, die auf compatMode beruhen, werden in Internet Explorer 8 weiterhin funktionieren, sollten aber auf die Verwendung von documentMode umgestellt werden, um spätere Probleme vozubeugen.

HTTP-Header

Mit hilfe eines HTTP-Headers kann man für die gesamte Website den Dokumentkompatibilitätsmodus für den Internet Explorer 8 festlegen.
Für den Apache-Webserver sollte der benutzerdefinierte Header wie folgt aussehen:

X-

-UA-Compatible: IE=EmulateIE7

Dieser Header würde den Internet Explorer 8 dazu veranlassen, die Webseiten so dazustellen, wie der Internet Explorer 7 sie darstellen würde.
Für den Apache 2.2 kann man auch das headers_module verwenden. Dazu sollte man sicherstellen, dass das headers_module geladen wird:

LoadModule headers_module modules/mod_headers.so

Danach kann man die Zeile:

<

Header set X-UA-Compatible "IE=EmulateIE7"

in der httpd.conf-Datei hinter den LoadModule-Zeilen einfügen. Diese Direktive kann man auch in die verschiedenen Konfigurationsabschnitte (<Location>, <Directory>,<Files> und <VirtualHost>) des Server eingefügen, um genauer zu steuern, welche Seiten in welchem Modus dargestellt werden sollen.

Weiterführende Links

Entwicklerinformationsindex für den Internet Explorer 8
Was ist neu im Internet Explorer 8 (in Englisch)
Entwickler-Tool für den Internet Explorer 8 (in Englisch)
CSS Compatibility and Internet Explorer (in Englisch)