Technology

Tobias Müller
Erschienen am 08. September, 2009
Kommentare
1
Javascript Browser-Erkennung - das Mysterium entschlüsseln

Javascript Browser-Erkennung - das Mysterium entschlüsseln

Jeder Web Entwickler, der sich etwas intensiver mit Javascript in Web-Anwendungen befassen muss, kennt das Problem: einzelne Browser - insbesondere aus der Internet Explorer-Familie - benötigen eine Sonderbehandlung. Um den Browser des Internetnutzers zu erkennen und dementsprechend zu behandeln, stehen zwei Ansätze zur Verfügung: das Auslesen der UserAgent-Informationen sowie die Überprüfung auf die Javascript-Fähigkeiten des Browsers.

Den UserAgent auslesen

Das Auslesen der UserAgent-Informationen liefert zwar recht ausführliche Informationen über den Browser inklusive Versionsnummer, allerdings kann der UserAgent erstens vom Benutzer selbst geändert werden und zweitens geben sich diverse Browser auch von sich aus als jemand anderes aus - da tut ein Opera schonmal so, als sei er ein Internet Explorer. Sich auf die UserAgent-Angaben zu verlassen, kann somit zu höchst unerfreulichen Fehlern führen, die den Nutzer unter Umständen dauerhaft vergraulen könnten.

Es geht auch besser

Der zweite Ansatz - die Überprüfung der vorhandenen Javascript-Fähigkeiten - liefert hier in jedem Fall viel gesichertere Ergebnisse. Hierbei wird überprüft, ob der Browser bestimmte Javascript-Methoden oder -Objekte kennt oder nicht kennt. Hieraus kann man sehr sicher ableiten, um welchen Browser es sich handelt.

Mit folgender Abfrage kann man beispielsweise zuverlässig den Internet Explorer 6 indentifizieren:

  1.  
  2. if (document.all && !window.opera && !window.XMLHttpRequest)
  3. {
  4. // Code fuer IE 6 und kleiner
  5. // Info:
  6. // document.all: Das all-Objekt wurde von Microsoft erfunden und wird von Internet Explorer und Opera verstanden -> muss also true sein
  7. // window.opera: dies wird nur von Opera-Browsern erkannt -> muss in diesem Fall also false sein
  8. // window.XMLHttpRequest: dies wird von Internet Explorer erst ab Version 7 erkannt -> muss also false sein
  9. }
  10. else
  11. {
  12. // Code für andere Browser
  13. }
  14.  

Meist macht es Sinn, direkt auf die im Script benötigten Methoden oder Objekte zu überprüfen. So beispielsweise bei der Event-Registrierung. Hier gibt es zwei komplett unterschiedliche Ansätze von Microsofts Internet Explorer auf der einen und dem W3C auf der anderen Seite. Dies würde man wie folgt lösen:

  1.  
  2. if (document.addEventListener)
  3. {
  4. // Code fuer W3C-konforme Browser (Firefox, Opera, Safari, Chrome etc.)
  5. // In W3C-konformen Browsern registriert man Events mit object.addEventListener()
  6. }
  7. if (document.attachEvent)
  8. {
  9. // Code fuer die Internet Explorer-Familie
  10. // In Microsoft-Browsern registriert man Events mit object.attachEvent()
  11. }
  12. else
  13. {
  14. // Veralteter DOM-Level-1 Ansatz
  15. // So war es frueher: object.eventhandler = function() {}
  16. }
  17.  

Ein immer wieder hilfreiches Nachschlagewerk für Browsererkennung anhand deren Fähigkeiten ist Kristof Lipferts Browser JS Test.

Screenshot von http://www.lipfert-malik.de


Tags: - - - - - -
Tobias Müller

der autor

Tobias Müller

Head of Web Development, strukturiert, implementiert und dirigiert auch anspruchsvollste Webprojekte zu einem gelungenen Finale.

1 Kommentare

Martin K.

Genau dieses Snippet brauchte ich gerade. Vielen Dank!

Hinterlasse einen Kommentar

Kommentare zu diesem Artikel abonnieren (jederzeit kündbar)