(JAVASCRIPT)(BROWSER)-Detection - Level "6"
CirTap
... 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>
ich nochmal...
nur um unnötige Einwände abzuschmettern:
JA: ich weiß, daß navigatot.appName "Modzilla" liefert
JA: ich weiß, daß sich Modsi mit "Modzilla/5.0" ausweist
und nicht mit 1.0
wie war das mit Word 2.0 und Word 6.0?
<stichel>
Die fangen gleich bei 5 an, nur um bei appVersion >= 4 nicht ignoriert zu werden
</stichel>
CirTap
PS: hoffentlich wird "Modsi" nicht zu einem "Motzi" :)
Hilfe!
Ich schreibe gerade eine 1a tolle Seite, und die soll natürlich mit NN, IE und Mozilla funzen... ich bin schliesslich Idealist!
Nehmen wir mal an, ich hätte jetzt den Mozilla5 bzw. Netscape6 mittels document.styleSheets erkannt...
wie spreche ich dann z.B. ein div oder eine style angabe darin an?
Wie ist die Syntax im Gegensatz zu
document.all.divbereich1.style.top=100;
oder
document.layers.divbereich.top=100;
(Der erfahrene DHTMLer mag erkennen, dass es sich hierbei um eine Y-Positionsveränderung an meinem Layer/Div divbereich1 handelt)
???
Und wo finde ich die reine Lehre, die Specs, die Beschreibung des DOM 1 im Netz?
Bio
Hilfe!
Ich schreibe gerade eine 1a tolle Seite, und die soll natürlich mit NN, IE und Mozilla funzen... ich bin schliesslich Idealist!
Nehmen wir mal an, ich hätte jetzt den Mozilla5 bzw. Netscape6 mittels document.styleSheets erkannt...
mit document.styleSheets hast du einen DOM-fähigen Browser erkannt - naja fast, IE4/5 haben nicht alles implementiert, aber das wesentliche.
wie spreche ich dann z.B. ein div oder eine style angabe darin an?
Wie ist die Syntax im Gegensatz zu
document.all.divbereich1.style.top=100;
naja. ich habs jetzt nicht getestet, aber da "all." beim IE einfach dazwischengeschoben wurde müßte schlichtweg
document.divbereich1.style.top=100;
sofern der div die ID "divbereich1" hat.
Und wo finde ich die reine Lehre, die Specs, die Beschreibung des DOM 1 im Netz?
natürlich beim W3C
Viel Spaß
CirTap
Hi,
du hast was wichtiges vergessen :
if (document.getElementById) alert("Mozilla/NC 6, IE5 ,DOM 1.0");
getElementByID ist halt das neue Zauberwort :)
gruss
Bel
Hi,
du hast was wichtiges vergessen :if (document.getElementById) alert("Mozilla/NC 6, IE5 ,DOM 1.0");
getElementByID ist halt das neue Zauberwort :)
hmmm.. klingt gut, wenn das aber mal nicht kracht.
getElementByID klingt aber schwer nach einer "Methode" und nicht nach einem Objekt.
Der Vorteil beim Abfragen von Objekten ist ja, daß wenn sie nicht existieren der Browser den Wert "NULL" zurückgibt was im Kontext von if(hattu.objekt) als false interpretiert wird.
Ich vermute, daß document.getElementById beim IE4 und NS4 schöne Fehlermeldungen bringt. Wär aber zu testen.
Viel Spaß
CirTap
meine letzte Antwort streichen, war Blödsinn :-))
das Zauberwort ist eines und funzt natürlich (woher sollte der Browser auch wissen, ob ich nach einer Methode oder einem Objekt frage..?-(
CirTap