Browsersniffer: Den Browsertyp mit JavaScript auslesen

Angaben zu Ihrem Browser

Ihr Browser meldet sich wie folgt zurück:

JavaScript-Befehl Bowserrückmeldung

Probleme

Zwar haben alle Browser intern einen eigenen, spezifischen Namen, manche UserAgents, wie z.B. Opera, bieten aber auch die Möglichkeit, sich als ein anderen Browser gegenüber dem http-Server auszugeben. Sollten Sie also mit Opera auf diese Seite gekommen sein, so müssen die obigen Angaben nicht zuwangsläufig stimmen - Mimikry macht es möglich. noch prüfen

Die Notwendigkeit

... einst

Notwendig wurde der Browsersniffer spätestens, als DHTML mit den jeweiligen 4-er Versionen der Browser von Netscape und Microsoft als jeweils firmenspezifisches Konzept ins Rennen um die Gunst der Programmierer geschickt worden ist. Diese Konzepte waren von Anfang an darauf ausgelegt, gegenseitig inkompatibel zu sein und verursachten somit im jeweils anderen Browser Fehler in der Anzeige und Funktionalität. Andere propietäre Techniken - wie z.B. die Tags <blink> und <marquee> werden dagegen gegenseitig einfach ignoriert.
Entsprechend aufgebaut waren dann die JavaScripts zum Unterscheiden der Browser:

<script type="text/javascript">
nn = (document.layers)
ie = (document.all)
</script>

Vorteil ist hierbei, dass gleich die Kompatibilität der DHTML-Technik abgefragt wurde - damit aber noch nicht der Browsertyp selbst. Für DHTML-Scripts reichte dies aber meistens. Inzwischen ist Netscape 4.x fast vom Markt der Nutzer verschwunden, seine Nachfolge traten NN 6.x und Buzilla 1 (Open-Scource-Variante von NN 7.x)
Dann kam NN 6.x und das <layer>-Modul wurde nicht länger unterstützt und konnte daher nicht mehr als Kriterium herangezogen werden, da es nicht zum ECMA-Script-Standard gehört.
Um also auch NN 6.x zu unterscheiden braucht es eine weitere Abfrage:
n6 = (document.getElementById&&!ie)
Andererseits gibt es nun Situationen, bei denen JavaScript-Befehle der Version 1.2 zum Einsatz kommen sollen und bekanntlich beherrscht/unterstützt der IE selbiges nicht vollständig - hier muss explizit unterschieden werden: self.outerWidth ist beispielsweise solch ein Befehl. Während mit dem NN problemlos damit gearbeitet werden kann, versagt hier der IE und man muss nicht nur ein für den NN unverständlichen Befehl - document.body.offsetWidth - verwenden, letzterer gibt wiederum bei NN einen Scriptfehler zurück. Um also die Außenmaße des angezeigten Fensters zu erhalten muss "doppelt" abgefragt werden und damit das Ergebnis nicht falsch überschrieben wird, muss eine Browserweiche in Aktion treten:

<script type="text/javascript">
if(nn||n6) Browseraussenbreite = (self.outerWidth)
if(ie) Browseraussenbreite = (document.body.offsetWidth)
</script>

Anmerkungen:
Der Browsersniffer muss nur einmal - möglichst am Anfang innerhalb einer Datei ausgeführt werden. Der gespeicherte Variablenwert ist auch in anderen JavaScript-Modulen abfragbar.
Auffallend ist, dass immer zuerst der NN abgefragt werden muss - sonst läuft es nicht !

... heute

Jenseits von DHTML gibt es auch heute noch reichlich Unterschiede zwischen diesen Browsern - so z.B. bei Cascading Style Sheets.
»Intern« werden eine Liste oder die sog. logischen Auszeichungen zum Teil von jedem Browser ganz anders formatiert - hier hilft nur eine browserspezifische CSS-Datei um die Unterschiede auszugleichen, damit der Betrachter unabhänging immer das Gleiche angezeigt bekommt.
Beispiel: Listen
Die CSS-Datei für den IE ie-spezifisch enthält folgende Anweisungen:

ul {
   margin-left : -20pt;
}

li {
   margin-left : 2pt
}
Die CSS-Datei für den NN ie-spezifisch enthält folgende Anweisungen:
ul {
   margin-left : 25pt;
}

li {
   margin-left : -15pt;
}

Diese beiden Styles haben jeweils den gleichen Effekt in der Bildschirmanzeige. Hier zeigen sich die Unterschiede schon recht deutlich.

Die Lösung

Es kommt darauf an, was Sie machen wollen:
Wenn Sie ausschließlich Andwender, die mit dem Internet-Explorer (ab Version 5.0) browsen, bedienen wollen, können Sie statt eines JavaScripts auch die sog. Conditional Comments einsetzen.
Wollen Sie die DHTML-Tauglichkeit testen oder andere Techniken mit unterschiedlicher Wirkung auf den Browser einsetzen kann als Browsersniffer folgendes Script dienen:

Position in der html-Datei: body-Bereich

Den obigen Anmerkungen ist noch hinzuzufügen:
Eine wirklich befriedigende »universelle« Lösung gibt es wohl nicht. Bei einer Reihe von Browsern ist JavaScript deaktivert (angeblich etwa 10 %) - daher empfiehlt sich unbedingt, einen kleinen <noscript>-Bereich zu pflegen in dem der Besucher auf die fehlende JavaScript-Unterstützung seinerseits hingewiesen wird und die akzeptable Alternativen enthält.

Position in der html-Datei: body-Bereich.
Die oben eingeflochtene Funktion testit() ist nur als Beispiel zu verstehen - das Script kann viel mehr leisten:

© 2002