merkwürdige Browseridenitfikation
HaJü
- browser
Hi!
Probiert doch mal die folgenden JavaScript Zeilen aus:
type=navigator.appName;
vers=navigator.appVersion.substring(0,1);
if(type=="Microsoft Internet Explorer" && vers>=4)alert("IE 5 oder höher");
if(type=="Netscape" && vers>=5)alert("NS 7");
Man sollte meinen, der IE 5 besitzt die appVersion 5 - stimmt nicht, der meldet sich mit 4.
Ähnlich der NS - die neue Version 7 meldet sich mit 5.
Was soll denn das?
Wer kann mich aufklären über derart Merkwürdiges.
Vielen Dank!
Hallo,
Was soll denn das?
Wer kann mich aufklären über derart Merkwürdiges.
das sind wirre bis historische (was sich nicht widerspricht) bis menschliche Gründe. Dieser Wert ist so unzuverläslich wie die Preisangaben auf den einschlägigen xxx-Seiten. Dieser Wert wird von den Browsern höchst individuell bestückt, bei manchen kann man sich per Menü wünschen, als was man denn durch die Lande ziehen möchte. (Opera7 ist per default ein IE6 ,-))
Deswegen: Browserweichen (die man ja normalerweise aus Javascriptgründen einbaut) möglichst immer durch Abfrage bestimmter JS-eigentümlichkeiten aufbauen. Kann er layer, aber kein .all? dann ist es wohl ein NS4.xy:. kann er .all und getElementbyID, dann ist es ein IE. Kann er getelementbyID aber kein .all? Wird wohl ein NS7 und-oder mozilla sein etc.... (Opera bekommt man durch die Abfrage if(window.opera), wobei: kann er dazu .all, dann ist es Nummer 7, ansonsten darunter....)
Chräcker
Hi!
Und vielen vielen Dank!
Allerdings funktioniert die folgende Abfrage nicht:
nc7=(document.getelementbyID)? 1:0;
Kann man die DOM-Fähigkeit so prüfen oder wie gehts?
Danke!
Moin!
Hi!
Und vielen vielen Dank!
Allerdings funktioniert die folgende Abfrage nicht:nc7=(document.getelementbyID)? 1:0;
getElementById <- immer so schreiben: Erster Buchstabe klein, die ersten Buchstaben der folgenden Worte groß, alle weiteren klein. Javascript ist ganz böse case-sensitiv, die Groß/Kleinschreibung ist entscheidend.
- Sven Rautenberg
Hallo HaJü,
nc7=(document.getelementbyID)? 1:0;
document.getElementById
Javascript ist case sensitiv. Schau Dir dazu auch das Posting von Sven an.
Grüße
Andreas
Hallo,
nc7=(document.getelementbyID)? 1:0;
damit (bei richtiger groß-Kleinschreibung, ich gebe zu, mein Posting war da schlampig) erwischst Du aber auch den IE. Schreibst Du nach DOM2, dann kann es mit dem nicht ganz DOM2-fähigen IE Schwierigkeiten geben. Also eventuell noch prüfen, ob der Browser .all kennt (dann ist es der IE oder Opera) oder nicht, dann ist es der NS7 (oder mozilla etc)
Chräcker
Hallo,
nc7=(document.getelementbyID)? 1:0;
damit (bei richtiger groß-Kleinschreibung, ich gebe zu, mein Posting war da schlampig) erwischst Du aber auch den IE. Schreibst Du nach DOM2, dann kann es mit dem nicht ganz DOM2-fähigen IE Schwierigkeiten geben. Also eventuell noch prüfen, ob der Browser .all kennt (dann ist es der IE oder Opera) oder nicht, dann ist es der NS7 (oder mozilla etc)
Chräcker
Moin!
Deswegen: Browserweichen (die man ja normalerweise aus Javascriptgründen einbaut) möglichst immer durch Abfrage bestimmter JS-eigentümlichkeiten aufbauen. Kann er layer, aber kein .all? dann ist es wohl ein NS4.xy:. kann er .all und getElementbyID, dann ist es ein IE. Kann er getelementbyID aber kein .all? Wird wohl ein NS7 und-oder mozilla sein etc.... (Opera bekommt man durch die Abfrage if(window.opera), wobei: kann er dazu .all, dann ist es Nummer 7, ansonsten darunter....)
Nö, auch alte Operas können document.all - wenn sie sich als IE ausgeben. Nur kann man damit nicht sonderlich viel sinnvolles anfangen, weil der Opera auch mit document.all nicht mehr kann als ohne.
Ich würde auch von der Rumraterei (wenn er das kann, und das nicht, dann ist es ein...) abraten. Bereits heute kennen und können aktuelle Browser document.getElementById. Da diese Zugriffsform vom W3C genormt wurde, ist damit zu rechnen, dass Browserweichen irgendwann vollkommen überflüssig werden.
Bis dahin reicht es meist aus, für den IE 4 (sehr selten geworden) und den Netscape 4 (noch etwas häufiger) eine Extra-Wurst zu braten - und nur wenn man wirklich spezielle Sonderfunktionen strickt, muß man sich vielleicht über Opera Gedanken machen. Die Abfrage auf "window.opera" allerdings ist, wie das Erscheinen von Opera 7 zeigt, keine sehr schlaue Idee, weil Opera 7 vieles von dem kann, was andere Browser schon vorher konnten, alte Operas aber nicht. Also muß man jetzt _wieder_ alle seine Skripte durchforsten und eine weitere Abfrage einbauen, die Opera 7 durchläßt. Ich behaupte, mit konsequenter Abfrage, ob die Objekte vorhanden sind, die man benutzen möchte, hätte man sich das ersparen können. Oder man macht einfach solche komplizierten Dinge nicht. ;)
- Sven Rautenberg
Hallo,
selbst bei getElementByID kommt man nicht immer um eine Browserweiche rum, möchte man NS4-benutzer (und bei mir Opera) nicht einfach vor die Wand laufen lassen. Außerdem kann der IE6 ein paar Dinge nicht oder macht sie nicht richtig (Event-handling zum Bsp.) also muß da immer noch eine "ist es der IE"-Weiche rein....er braucht eben eine Extrawurst.
Irgendwann sind Browserwiechen vielleicht überflüssig, heute leider meist noch nicht. IE6 und NS7 reagieren noch lange nicht gleich...
(verzichtet man auf intensiveren JS-Einsatz, kann man natürlich auch auf eine JS-Weiche verzichten ,-) Mouseover bekommen fast alle hin....)
Chräcker
Hi!
appVersion gibt fast immer so etwas aus: Mozilla/X.X
Diese Angabe hat aber seit IE4 nix mehr mit der Browserversion zutun. Früher sollte das anscheinend mal den Eindruck erwecken, das Browser mit der gleichen Mozilla-Version das gleiche können, was ja nie der Fall war. Diese Angabe ist also zur Browsererkennung gänzlich ungeeignet.
Gruß Herbalizer
Moin!
Man sollte meinen, der IE 5 besitzt die appVersion 5 - stimmt nicht, der meldet sich mit 4.
Ähnlich der NS - die neue Version 7 meldet sich mit 5.Was soll denn das?
Wer kann mich aufklären über derart Merkwürdiges.
Der "geheime" Codename vom Netscape ist "Mozilla". Und folgerichtig war Netscape 1.0 "Mozilla/1.0". Diese Mozilla-Versionsnummer kriegst du über navigator.appVersion raus.
Nach Mozilla 1 kamen Mozilla 2, Mozilla 3 und Mozilla 4 (oh Wunder). Mozilla 4 ist der allseits bekannte und "beliebte" Netscape 4.
Und die Nachfolgeversion ist eben Mozilla 5. Nur hat Firma AOL/Netscape da nicht auch das Etikett "Netscape 5" draufgeklebt, sondern "Netscape 6.0". Und "Netscape 6.1". Und "Netscape 6.2". Und "Netscape 7.0". Diese ganzen neuen Netscapes entstammen bekanntlich alle aus dem Mozilla-Projekt (endlich darf der Browser so heißen, wie sein Codename), welches mit vielen 0.x-Versionen (für Netscapes der 6er-Serie) bzw. Mozilla 1.0 (für Netscape 7) herhalten mußte. Derzeiter Stand ist Mozilla 1.2. Damit nun diese endlich echten Mozillas nicht mit den alten Mozillas von damals kollidieren, ist der neue Mozilla (echte Versionsnummer 0.x oder 1.x) eben im Codenamen immer ein "Mozilla/5.0". Die echte Versionsnummer steht weiter hinten im User-Agent-String.
Tja, und der IE wurde irgendwann man von Microsoft als "kompatibel zu Mozilla/4.0" gekürt und erhielt deshalb die passende Versionsnummer (damit der IE bei entsprechend prüfenden Javascripten auch mit durchkommt und beachtet wird), die eigentliche Versionsnummer steht aber auch wieder im User-Agent-String drin.
Dieses ganze Verwirrspiel sollte dich hoffentlich davon überzeugen, dass es nicht sinnvoll ist, zu versuchen, im navigator-Objekt irgendwelche Informationen zu erkennen. Das geht meist schief - zumal auch Opera auf Wunsch ein Mozilla/4 sein kann, oder ein IE 5.
Wenn du Javascript auf die verschiedenen Browser anpassen willst, dann frage ab, ob sie die zu benutzenden Javascript-Öbjekte kennen:
if (document.getElementById)
{
// code fürs w3c-dom
}
else if (document.all)
{
// code für ie 4
}
else if (document.layers)
{
// code für netscape 4
}
else
{
// ggf. meldung, dass der browser nichts kann
}
- Sven Rautenberg
Hi!
Derzeiter Stand ist Mozilla 1.2.
aber nur beta, die stable sollte zwar laut roadmap schon draußen sein, ist sie aber nicht - leider! Denn ich habe mir dummerweise die beta installiert und die hat doch noch den ein oder anderen bug - und gibts nicht in deutsch.
Grüße
Andreas
Hi,
aber nur beta, die stable sollte zwar laut roadmap schon draußen sein, ist sie aber nicht - leider! Denn ich habe mir dummerweise die beta installiert und die hat doch noch den ein oder anderen bug
Beim Mozilla ist das wenigstens auf die beta-Phase begrenzt - beim IE sind bugs auch im Normalprodukt drin - und bleiben es auch lange nach deren Bekanntwerden...
cu,
Andreas
Tach auch,
aber nur beta, die stable sollte zwar laut roadmap schon draußen sein, ist sie aber nicht - leider! Denn ich habe mir dummerweise die beta installiert und die hat doch noch den ein oder anderen bug
Beim Mozilla ist das wenigstens auf die beta-Phase begrenzt - beim IE sind bugs auch im Normalprodukt drin - und bleiben es auch lange nach deren Bekanntwerden...
Ahem, diese Aussage halte ich so fuer Unsinn. Auch beim Mozilla sind in den "Vollversionen" so einige Bugs drin. Einige fuer mehrere Versionen die dann in einer der Nachfolgeversionen gefixt wurden/werden. Die Aussage "sind bugs auch im Normalprodukt drin - und bleiben es auch lange nach deren Bekanntwerden..." trifft auch auf Mozilla zu.
Gruss,
Armin