Kennt jemand nen guten Browsercheck
Patrick
- javascript
0 Cheatah0 Patrick0 Cheatah0 *fs0 Heinz Geiger0 Cheatah0 Heinz Geiger0 Cheatah
0 Orlando
Hi zusammne!
Leider kann ich grad das Forum nicht durchsuchen....
Gibt es in Javascript son standard Browsercheck, der alle gängigen Browser identifiziert? Wäre prima, wenn Ihr da nen Tipp für mich hättet.
Gruß, Patrick
Hi,
Gibt es in Javascript son standard Browsercheck, der alle gängigen Browser identifiziert?
sowas ist weder verlässlich noch empfehlenswert. Überprüfe grundsätzlich auf Existenz aller von Dir verwendeten Objekte und Methoden, dann kann es keine Probleme geben.
Cheatah
Überprüfe grundsätzlich auf Existenz aller von Dir verwendeten Objekte und Methoden, dann kann es keine Probleme geben.
Also, z.B.
if (document.getElementById("one").innerHTML) --dann: ok
else --nich ok
???
Kann man so jeden Befehl überprüfen?
Hi,
if (document.getElementById("one").innerHTML)
das ergibt einen Fehler, wenn der Browser die Methode document.getElementById nicht kennt. Gemeint ist:
if (document.getElementById)
Beachte: die Methode ohne Klammern, weil sonst wieder die Ausführung derselben versucht würde.
Kann man so jeden Befehl überprüfen?
Ja.
Cheatah
tach
es gibt auch eine browserweiche mit css. weiß nicht, ob di was taugt:
http://selfaktuell.teamone.de/tippstricks/css/browserweiche/index.htm
*fs
Hi,
if (document.getElementById("one").innerHTML)
das ergibt einen Fehler, wenn der Browser die Methode document.getElementById nicht kennt. Gemeint ist:
if (document.getElementById)
Beachte: die Methode ohne Klammern, weil sonst wieder die Ausführung derselben versucht würde.
Kann man so jeden Befehl überprüfen?
Ja.
Cheatah
hi,
-noch mein kommentar zu browsercheck
-das sicherste ist es schon vor jeder verwendung von methoden und eigenschaften diese zu überprüfen.
-leider ist dies nicht unbedingt der perfomance bekömmlich und teilweise auch wie folgend fehlerbehaftet:
if (self.navigator != null && self.navigator.javaEnabled != null)
alert("javaEnabled existiert");
else
alert("javaEnabled existiert nicht");
-Der ie 5 und 6 macht hier z.bsp. eine fehlermeldung.
-Und noch was wenn du also folgendes testen willst:
document.getElementById("name_element").irgend_eine_methode;
muss du das wie folgt implementieren:
if (document.getElemantById != null && document.getElemantById("name_element") != null && document.getElemantById("name_element").irgen_eine_methode != null)
alert("ok");
else
alert("nicht ok");
du musst die also durch das dom durchhangeln sonst kriegst du fehlermeldungen.
-du kannst auch den userAgent auswerten. du musst einfach alle möglichkeiten durchchecken. z.bsp. opera kann sich ja verschieden identifizieren.
-folgende funktion:
function Lenas_Cross_Browser_test_name_browser()
{
for (var i = 0; i < arguments[0].length; i++)
{
// nc_4
if (arguments[0][i] == "nc_4" && navigator.userAgent.indexOf("Mozilla/4") != -1 && navigator.userAgent.indexOf("MSIE") == -1 && navigator.userAgent.indexOf("Opera") == -1)
return true;
// nc_6
if (arguments[0][i] == "nc_6" && navigator.userAgent.indexOf("Mozilla/5") != -1 && navigator.userAgent.indexOf("rv:0") != -1 && navigator.userAgent.indexOf("Gecko") != -1 && navigator.userAgent.indexOf("Netscape6") != -1)
return true;
// nc_7
if (arguments[0][i] == "nc_7" && navigator.userAgent.indexOf("Mozilla/5") != -1 && navigator.userAgent.indexOf("rv:1") != -1 && navigator.userAgent.indexOf("Gecko") != -1 && navigator.userAgent.indexOf("Netscape/7") != -1)
return true;
// mo_0
if (arguments[0][i] == "mo_0" && navigator.userAgent.indexOf("Mozilla/5") != -1 && navigator.userAgent.indexOf("rv:0") != -1 && navigator.userAgent.indexOf("Gecko") != -1 && navigator.userAgent.indexOf("Netscape") == -1)
return true;
// mo_1
if (arguments[0][i] == "mo_1" && navigator.userAgent.indexOf("Mozilla/5") != -1 && navigator.userAgent.indexOf("rv:1") != -1 && navigator.userAgent.indexOf("Gecko") != -1 && navigator.userAgent.indexOf("Netscape") == -1)
return true;
// ie_4
if (arguments[0][i] == "ie_4" && navigator.userAgent.indexOf("Mozilla/4") != -1 && navigator.userAgent.indexOf("MSIE 4") != -1 && navigator.userAgent.indexOf("Opera") == -1)
return true;
// ie_5
if (arguments[0][i] == "ie_5" && navigator.userAgent.indexOf("Mozilla/4") != -1 && navigator.userAgent.indexOf("MSIE 5") != -1 && navigator.userAgent.indexOf("Opera") == -1)
return true;
// ie_6
if (arguments[0][i] == "ie_6" && navigator.userAgent.indexOf("Mozilla/4") != -1 && navigator.userAgent.indexOf("MSIE 6") != -1 && navigator.userAgent.indexOf("Opera") == -1)
return true;
// op_5
if (arguments[0][i] == "op_5" && (navigator.userAgent.indexOf("Opera/5") != -1 || navigator.userAgent.indexOf("Opera 5") != -1))
return true;
// op_6
if (arguments[0][i] == "op_6" && (navigator.userAgent.indexOf("Opera/6") != -1 || navigator.userAgent.indexOf("Opera 6") != -1))
return true;
}
return false;
}
-sie wird wie folgt aufgerufen:
Lenas_Cross_Browser_test_name_browser(["nc_4", "nc_6", "nc_7"])
die funktion gibt bei den browsern netcape 4, 6 und 7 true zurück, ansonsten false.
-folgende browser habe ich implementiert:
nc_4, nc_6, nc_7 netscape
mo_0, mo_1 mozilla
ie_4, ie_5, ie_6 internet explorer
op_5, op_6 opera
gruss, heinz
Hi,
-das sicherste ist es schon vor jeder verwendung von methoden und eigenschaften diese zu überprüfen.
natürlich, genau das sagte ich.
-leider ist dies nicht unbedingt der perfomance bekömmlich und teilweise auch wie folgend fehlerbehaftet:
Hm?
if (self.navigator != null && self.navigator.javaEnabled != null)
Wenn Du auf null prüfst und der Wert undefined ist, weil navigator.javaEnabled undefiniert ist, ist eine Fehlermeldung ziemlich logisch, meinst Du nicht? Beide Werte gelten als false, deswegen reicht ein "if (navigator && navigator.javaEnabled)" vollkommen aus.
-Der ie 5 und 6 macht hier z.bsp. eine fehlermeldung.
"Eine" Fehlermeldung sagt überhaupt nichts. _Welche_?
muss du das wie folgt implementieren:
if (document.getElemantById != null [...]
Hier gilt das gleiche.
du musst die also durch das dom durchhangeln sonst kriegst du fehlermeldungen.
Ja. Das gilt bei anderen Objektpfaden genauso.
-du kannst auch den userAgent auswerten.
Das war schon immer sinnfrei und ist heute nicht besser.
z.bsp. opera kann sich ja verschieden identifizieren.
Ja. Und der nächste Browser, der neu auf den Markt kommt, führt zur Notwendigkeit einer Erweiterung des Scripts, obwohl er nicht mehr oder weniger kann als bereits bekannte Browser.
-folgende funktion:
... sollte dringend vermieden werden.
Cheatah
Hi,
-das sicherste ist es schon vor jeder verwendung von methoden und eigenschaften diese zu überprüfen.
natürlich, genau das sagte ich.
-leider ist dies nicht unbedingt der perfomance bekömmlich und teilweise auch wie folgend fehlerbehaftet:
Hm?
if (self.navigator != null && self.navigator.javaEnabled != null)
Wenn Du auf null prüfst und der Wert undefined ist, weil navigator.javaEnabled undefiniert ist, ist eine Fehlermeldung ziemlich logisch, meinst Du nicht? Beide Werte gelten als false, deswegen reicht ein "if (navigator && navigator.javaEnabled)" vollkommen aus.
navigator.javaEnabled ist keine Eigenschaft sondern eine Methode.
Ich teste darum gegen null um festzustellen ob javaEnabled ein gültiges Methodenobjekt darstellt.
Wie gesagt ie 5 und 6 bringen die Fehlermeldung
"Objekt unterstützt diese Eigenschaft nicht"
Im Netscape 4, 6 und 7 funktioniert die ganze Sache.
Auch wenn du nicht gegen null testet wirft der Explorer diesen Fehler. auprobieren!!
-Der ie 5 und 6 macht hier z.bsp. eine fehlermeldung.
"Eine" Fehlermeldung sagt überhaupt nichts. _Welche_?
muss du das wie folgt implementieren:
if (document.getElementById != null [...]
Hier gilt das gleiche.
Hier ebenfalls getElemantById ist eine Methode und keine Eigenschaft!
du musst die also durch das dom durchhangeln sonst kriegst du fehlermeldungen.
Ja. Das gilt bei anderen Objektpfaden genauso.
-du kannst auch den userAgent auswerten.
Das war schon immer sinnfrei und ist heute nicht besser.
z.bsp. opera kann sich ja verschieden identifizieren.
Ja. Und der nächste Browser, der neu auf den Markt kommt, führt zur Notwendigkeit einer Erweiterung des Scripts, obwohl er nicht mehr oder weniger kann als bereits bekannte Browser.
Ich habe ein Crossbrowsermodul geschrieben das mir die ganzen Methoden und Eigenschaften und Fehler usw. der Browser kapselt.
In den Scripten verwende ich also generische Methoden und Eigenschaften. Ich brauche also nur dieses eine Modul zu pflegen.
-folgende funktion:
... sollte dringend vermieden werden.
Mit der untenstehenden Funktion hatte ich bisher noch nie Probleme.
Ich kann mir nicht vorstellen wie ein Proxy oder sonst was die Eigenschaften des Navigator-Objektes im Browser auf meinem Rechner ändern soll.
Ich kann mir sowas höchsten bei den Umgebungsvariablen serverseitig z.Bsp. für PHP vorstellen.
Cheatah
Hi,
navigator.javaEnabled ist keine Eigenschaft sondern eine Methode.
eine Methode, die man nicht ausführt, sondern nur überprüft, ist in dem Moment eine Eigenschaft - die runden Klammern fehlen. In Python kann man diese Dualität ganz besonders gut sehen: Python sieht alles, ob Objekt, Methode oder Variable, zunächst als Variable an - bis zur Verwendung.
Ich teste darum gegen null um festzustellen ob javaEnabled ein gültiges Methodenobjekt darstellt.
Wenn es nicht bekannt ist, kann JavaScript auch nicht ahnen, dass es eine Methode sein sollte - es ist daher undefiniert, nicht null.
Auch wenn du nicht gegen null testet wirft der Explorer diesen Fehler. auprobieren!!
Kann ich leider nicht, ich arbeite momentan an einem Mac mit Netscape 4. Aber Du hast schon recht: Ich glaub's nicht, bevor ich es selbst sehe :-)
Hier ebenfalls getElemantById ist eine Methode und keine Eigenschaft!
Siehe oben. Erst wenn JavaScript die Eigenschaft(!) kennt, kann es wissen, dass es eine Methode ist.
z.bsp. opera kann sich ja verschieden identifizieren.
Ja. Und der nächste Browser, der neu auf den Markt kommt, führt zur Notwendigkeit einer Erweiterung des Scripts, obwohl er nicht mehr oder weniger kann als bereits bekannte Browser.
Ich habe ein Crossbrowsermodul geschrieben das mir die ganzen Methoden und Eigenschaften und Fehler usw. der Browser kapselt.
Auch die, dass ich in meinem Mozilla keinen Zugriff auf das navigator-Objekt zulasse? Und: Wenn Du einen neuen Browser nicht mehr erkennst, obwohl Du ihn genauso handhaben kannst wie bereits bekannte, was nützt Dir dann ein gefangener Fehler?
Ich brauche also nur dieses eine Modul zu pflegen.
Meine Aussage ist: Schon dies ist unnötig.
Mit der untenstehenden Funktion hatte ich bisher noch nie Probleme.
Lucky you.
Ich kann mir nicht vorstellen wie ein Proxy oder sonst was die Eigenschaften des Navigator-Objektes im Browser auf meinem Rechner ändern soll.
Nein, das tut ein Proxy auch nicht. Das kann nur der Client selbst - und der _kann_ es auch.
Cheatah
Hi Heinz,
navigator.userAgent
dieser String ist nicht zuverlässig, er kann bewusst oder unbewusst (Firewall, Proxy) manipuliert oder gelöscht werden. Abgesehen davon, dass Javascript nicht vorausgesetzt werden kann. Ich kann mir auch nicht vorstellen, dass so eine Weiche einen Sinn macht.
BTW - wenn schon, dann ist für Opera *ausschließlich* if(window.opera) zulässig, sonst *nichts*.
LG Orlando