Hauptmenü

Untermenü

JavaScript - Objektreferenz - IE only

1. Einführung

Wahrscheinlich handelt es sich bei den Abweichungen, die der IE aufweist, um Relikte aus der Zeit des großen Browserkrieges in den späten 90ern. Besonders beim window- und document-Objekt gibt es gravierende Unterschiede zu den anderen Browsern. Ich liste zuerst die "richtigen" Befehle (sorry, Eigenschaften und Methoden) auf und zeige dann die M$-Versionen.

Ein wichtiger Hinweis

Die folgenden Angaben beziehen sich ausschließlich auf den IE 8 und abwärts. Ab dem 9er kommt er auch mit den Standardanweisungen klar. Eigentlich wollte ich diesen Anschnitt komplett löschen, habe mir aber gedacht, dass es vielleicht noch jemand brauchen könnte.

2. innerHeight, innerWidth

Hier gibt zwei(!) Möglichkeiten, die leider abhängig vom Darstellungsmodus sind. Im Quirks-Modus muss man mit document.body.clientHeight/Width arbeiten, während für den Strict-Modus document.documentElement.clientHeight/Width vorgesehen ist. Beides funktioniert aber nur, wenn beim Aufruf das <html>- und <body>-Tag vorhanden ist. Idealerweise empfiehlt sich der Event-Handler onload im <body>-Tag. Puh, was für ein Blödsinn.

3. outerHeight, outerWidth

Hier haben wir es mit demselben Elend zu tun. Die MS-Lösung (Ironie) lautet diesmal aber document.all.Body.offsetHeight/Width. Angeblich soll es da noch eine Variante für den Strict-Modus geben, aber die kenne ich leider nicht.

4. pageYOffset, pageXOffset

Hier haben wir es wieder mit dem bekannten Darstellungsgekröse zu tun. Im Quirks-Modus muss man document.body.scrollLeft/Top nehmen, ansonsten document.documentElement.scrollLeft/Top nehmen. Grauselig!

5. Anwendungsweise

Wie geht man nun an das Problem der unterschiedlichen "Befehle" heran? Nun, sehr gerne wird mit document.all gearbeitet. Das gab es früher nur im Internet Explorer. Mittlerweile kommt aber auch der Opera klar. Und selbst der Firefox unterstützt es teilweise. Darum sollte man eine Unterscheidung mit userAgent machen.


if (navigator.userAgent.match(/MSIE/))
{
  // IE-only
}
else
{
  // Der Rest
}

Man kann das auch noch weiter steigern, indem man die jeweiligen Methoden dezidiert auflistet und so die zusätzlichen Unterschiede innerhalb des Internet Explorers umgeht.


if (document.body.clientHeight)
{
  // IE im Quirks-Modus
}
else if (document.documentElement.clientHeight)
{
  // IE im Standard-Modus
}
else if (window.innerWidth)
{
  // Der Rest
}
else
{
  // Nanü, hier stimmt was nicht
}

6. Ein Hinweis

Einige der MS-spezifischen Dinge funktionieren wie schon gesagt auch in anderen Browsern. Leider aber nur teilweise und manchmal auch nur bei Unterobjekten von document. Zum Teufel mit dieser Sprache. Was aber nun mit den Feinheiten? Naja, wenn ihr mal vor einem Problem mit diesen Eigenschaften steht, dann hilft nur eins. Ausprobieren!

zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt