Visit Linkwerk.com

Cross-Browser: es wird immer besser – oder doch nicht?

Dem im März 2009 erschienenen Internet Explorer 8 wurde von Anfang an eine bessere Unterstützung von Webstandards bescheinigt. Wer Websites macht, wird das bestätigen können. Wer allerdings Javascript-Bibliotheken entwickelt, die von anderen auf ihren Seiten eingesetzt werden sollen, kann ein anderes Bild bekommen.

Mit dem IE6 hat Microsoft die Unterscheidung in “Quirks Mode” und “Standard Mode” eingeführt. Ersterer sorgt dafür, dass der Browser die bis dato implementierte Standardkonformität vergisst und Seiten auf “althergebrachte” Weise darstellt. Im Standard Mode wird eine Seite angezeigt, wenn sie eine Doctype-Deklaration besitzt. So weit, so gut.

Microsofts Wunsch (oder Notwendigkeit) nach Abwärtskompatibilität hat aber mit dem IE7 zu Problemen geführt, so dass sie mit dem IE8 nun ein neues Konzept eingeführt haben: Document Compatibility. Der IE8 kann sich nun (fast wahlweise) verhalten wie ein

  • IE8 (wow)
  • IE7 (mhhh)
  • IE5 (oh nooo!)

Dazu reicht nicht mehr der Doctype in der Seite aus, weil der Doctype ja ursprünglich zwischen IE6-Standard und IE6-Quirk (=IE5) unterschieden hat. Da sich aber der IE7-Standard-Mode völlig anders verhält als der IE6-Standard-Mode, ganz zu schweigen vom ….. Du weißt, wie das weiter geht.

Nun gibt’s also neue Features. Wer seine Seite im IE8 behandelt wissen möchte, wie im IE7 muss nichts weiter tun, als folgendes in die Seiten einbauen:

<!-- Mimic Internet Explorer 7 -->
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" >

Moment mal? “http-equiv”? Das ist doch ein Äquivalent für einen HTTP-Header! – Richtig. Wer es nicht in seine Seiten einbauen möchte, kann seinen Webserver auch dazu bewegen, den entsprechenden Header zu schicken. Auf den Microsoft-Seiten ist eine Anleitung für IIS und Apache zu finden.

Neben IE7-Kompatibilität, was bedeutet, dass der Browser in den IE7-Standard-Mode oder -Quirks-Mode gehen kann, lässt sich auch ein Modus direkt wählen. Die Schlüsselworte lauten “IE5”, “IE7” und “IE8”, oder man wählt gleich “edge”, dann ist man immer vorne mit dabei (Details siehe oben verlinkte MS-Seite). Mit der Angabe

<!-- edge mode -->
<meta http-equiv="X-UA-Compatible" content="IE=edge" >

wählt der Browser stets den höchsten verfügbaren Modus.

Schon verwirrt oder geht noch mehr?

Ok, wer bis hier gelesen hat, verträgt mehr. Es geht nämlich noch weiter. Unter der Überschrift “Understanding Content Attribute Values” heißt es:

Das content-Attribut ist so flexibel, dass es andere als die zuvor beschriebenen Werte akzeptiert. Das erlaubt Dir, feiner zu steuern, wie der Internet Explorer Deine Seiten darstellt. Zum Beispiel kannst Du das content-Attribut auf IE=7.5 setzen. Wenn Du das machst, versucht der Internet Explorer den Wert in einen Versionsvektor zu wandeln und wählt den Modus, der am nächsten am Ergebnis liegt. In diesem Fall würde der Internet Explorer den IE7-Modus wählen. Die folgenden Beispiele zeigen den jeweils gewählten Modus für weitere Werte, vorausgesetzt es liegen keine weiteren [beeinflussenden] Faktoren vor:

<!-- IE5 mode -->
<meta http-equiv="X-UA-Compatible" content="IE=4">

<!-- IE7 mode -->
<meta http-equiv="X-UA-Compatible" content="IE=7.5" > 

<!-- IE8 mode -->
<meta http-equiv="X-UA-Compatible" content="IE=100" > 

<!-- IE5 mode -->
<meta http-equiv="X-UA-Compatible" content="IE=a" >

Was passiert nun im IE8, wenn es keine Hinweise des Webadmins oder Seitenverfassers gibt? Die Antwort von MS ist einfach: Mit Doctype-Deklaration erfolgt die Anzeige im IE8-Mode, sonst im guten alten Quirks Mode. Wenn da nicht die Ausnahmen wären. Zitat:

Wenn die Doctype-Direktive einen standardbasierten Dokumenttyp anzeigt, zeigt der Internet Explorer 8 die Seite im IE8-Modus, außer in den folgenden Fällen:

  • Kompatbilitätsansicht ist für die Seite eingeschaltet.
  • Die Seite wurde in der Intranetzone geladen und der Internet Explorer 8 ist so konfiguriert, dass Seiten in der Intranetzone in der Kompatbilitätsansicht dargestellt werden.
  • Der Internet Explorer 8 ist konfiguriert, alle Webseiten in der Kompatbilitätsansicht darzustellen.
  • Der Internet Explorer 8 ist konfiguriert die Kompatbilitätsansichtsliste zu verwenden, die eine Liste von Websites angibt, die immer in der Kompatbilitätsansicht dargestellt werden.
  • Die Entwicklerwerkzeuge überschreiben die Angaben in der Webseite.
  • In der Webseite tritt ein Seitendarstellungsfehler auf und der Internet Explorer 8 ist so konfiguriert, dass er solche Fehler automatisch behebt, indem er die Seite erneut in der Kompatbilitätsansicht öffnet.

Where’s the beef?

Und was soll das ganze nun? Letzlich kann die Angelegenheit jedem egal sein, der seine Seiten im Griff hat. Man kann sich noch über den Aufwand wundern. Wer braucht IE5-Kompatibilität? Warum gibt’s keinen Schalter für IE6?

Meine Haltung ist: Webseiten, die für den IE5 “designed” wurden, sehen sowieso sch…licht aus. Da macht’s nicht viel, wenn das Design nicht mehr ganz passt. Auf der anderen Seite tut der Kompatbilitätskram auch niemandem weh.

Oder doch?

Doch. Mir. Wir entwickeln eine Javascript-Bibliothek, die natürlich nicht nur auf unseren Seiten funktionieren soll. Dank der in der Tat verbesserten Situation im IE8 wird das Entwicklerleben wirklich einfacher. Wir kommen gut voran und freuen uns über geringeren Aufwand. Doch, zu früh gefreut.

Bindet man die Bibliothek in Seiten ein, die keine Doctype-Deklaration haben, läuft vieles nicht mehr so, wie gewünscht. Das gilt für Javascript-Anweisungen, die Änderungen am DOM durchführen und dabei Einfluss auf die Darstellung nehmen. Bei Seiten, die wir selbst im Griff haben, kein Problem. Auch nicht bei Kunden, die mit uns in Kontakt stehen. Gibt man aber eine solche JS-Biblothek zum Download frei, hat man keine Kontrolle mehr, in welcher Umgebung die Software zum Einsatz kommt.

Und was bietet Microsoft dafür an? Das documentMode-Property. Nun darf ich also in Javascript, sorry Jscript, mittels document.documentMode abfragen, in welchem Darstellungsmodus die Seite angezeigt wird. Dumm nur, dass mir das Wissen nichts nützt. Letzlich muss ich auch in IE8-Zeiten Vorkehrungen für IE5 treffen. Im Gegensatz zu früheren Versionen, die sich entweder wie der IE5 oder wie sie selbst verhalten konnten, kann der IE8 nun aber an multipeler Persönlichkeitsstörung leiden.


One Response to “Cross-Browser: es wird immer besser – oder doch nicht?”

  • Gaylord Aulke Says:

    Wie so oft macht Microsoft alles mit jedem Release komplexer. Aber es gibt doch bestimmt (bald) eine Microsoft Entwicklungsmgebung, die das alles wieder schön autmatisch richtig macht. Natürlich nur in Verbindung mit Microsoft Betriebssystem, Microsoft Webserver, Microsoft Datenbank…