CirTap: (JAVASCRIPT)(BROWSER)-Detection - Level "6"

Beitrag lesen

... oder "1" - wenn man davon ausgeht, dass "Mozilla 1.0" ja nun langsam in die Hufe gekommen ist.

Tach Forum!

Ich bin ja nun nicht unbedingt der JS-Guru, aber auch mir ist spätestens seit Lektüre des Buches von Nick Heinle bekannt, daß man möglichst eine Objekt-Prüfung vornehmen sollte, um einen bestimmten Browser oder dessen Version zu identifizieren und nicht (ausschließlich) irgendwelche navigator.appVersions abfragen.

Bislang wurden mit document.all der IE4+ und mit document.layers der NS4 relativ "eindeutig" identifiziert, die Möglichkeit von RollOvers zu erstellen schlicht mit document.images, das kann auch Klein-Opera - mehr war und ist für die meisten WebSites auch nicht "erforderlich", um einigermaßes "sicher" seine Scripte ohne Gemosere des userAgents laufen zu lassen.

Nun kommt der langerwartete Mozilla daher - der von Netsi-Fans heißersehte "IE-Killer" <g> - und siehe da:
kein document.all und kein document.layers - schade, schade, schade.
Das killt nicht nur IE sondern vermutlich auch einige Millionen liebevoll verscriptete WebSites... (vornehmlich NetObject Fusion-User werden vermutlich gucken, weil nix mehr geht <g>)

Keine der beiden o.g. Objekt-Auflistungen ist nämlich DOM-konform. MS hat document.all vermutlich aufgrund der damaligen CSS-Spec. eingebaut - auch blöd, daß das nun weg ist.
Da sich Mozilla aber an diese hält (und IE5/5 dieser sehr nahe ist, ätsch) bietet sich folge Abfrage an:

if (document.layers) {
    // code für NS4
  }
  if (document.all document.styleSheets) {
    // code für IE4/5 *UND* MOZ1/NS6
     ....
    // ggf. weitere versionspezifische abfragen
  }
innerhalb der 2. Abfrage kann man bei Bedarf dann einzelne "native IE-Goodies" wie gehabt mit if(document.all) ausklammern.

Und wer's nicht glaubt greift einfach zur Schere:
<script language="JavaScript" type="text/javascript">
<!--
  if (document.layers) alert("Netscape 4");
  if (document.all) alert("IE 4/5");
  if (document.styleSheets) alert("Mozilla 1, Netscape 6, IE4, IE5, DOM 1.0");
// -->
</script>

Viel Spaß beim Umschreiben Eurer Scripte :-)

CirTap

PS: vielleicht kann der SelfBrowser ja nun auch bald in einem "Netscape" laufen <gg>