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