Objekt-Methoden abfragen
Mirko Richter
- javascript
0 Calocybe
Hallo
Um JavaScript-Fehlermeldungen zu vermeiden besteht bekanntlich die Möglichkeit abzufragen ob ein Objekt / eine Eigenschaft existiert. Fuer das image-Objekt z.B. etwa so:
function test()
{
if(document.images)
alert("Der Browser kennt das Objekt images")
else
alert("Der Browser kennt das Objekt images NICHT")
}
In Selfhtml ist nachzulesen, dass man auch Objekt-Methoden abfragen kann <../../tebc.htm#a6>. Leider ist kein Beispiel aufgefuehrt. Meiner Meinung nach muesste das in etwa so aussehen:
function test()
{
if(document.forms.reset())
alert("Der Browser kennt die Methode reset()")
else
alert("Der Browser kennt die Methode reset() NICHT")
}
Getestet habe ich das mit dem IE3 (der reset() nicht kennt). Leider bekomme ich nicht das gewünschte Ergebnis. Kann mir jemand weiterhelfen?
Viele Gruesse
Mirko Richter
Hallo
function test()
»» {
»» if(document.forms.reset())
alert("Der Browser kennt die Methode reset()")
»» else
alert("Der Browser kennt die Methode reset() NICHT")
»» }
Nicht ganz, denn damit rufst Du die reset()-Methode auf und wertest den Rueckgabewert aus. Imho muesste es ohne Klammern gehen, also
if (document.forms.reset)
Ich hatte dieses Problem mal, als ich die replace()-Methode des location-Objektes verwenden wollte, die es erst seit JS1.1 gibt. Ich habe also versucht, auf diese Weise das Vorhandensein der Methode zu ueberpruefen:
if (window.location.replace) window.location.replace("target.html");
Der Netscape 4.0 nimmt das gelassen hin und wechselt die Location. Ob er es wirklich kapiert hat, oder nur zufaellig das richtige macht, weiss ich nicht. Was mit IE3 ist, weiss ich nicht, ich kam noch nicht dazu, es ausgiebig zu testen. Der IE4 brachte mal eine Fehlermeldung, aber wie es beim IE eben so ist, kann man ihn oft durch eine Neuinstallation vom eigenen Willen ueberzeugen; so war es glaube ich auch in diesem Fall.
Naja, probier halt mal, und erzaehl uns dann, was Du rausgefunden hast.
By the way: Muss nach dem alert() im if-Zweig nicht erst ein Semikolon kommen, bevor es mit else weitergeht? Ich weiss, das klingt ein bisschen unlogisch, aber so ist es jedenfalls in C, was ja das Vorbild fuer JS ist.
Calocybe
Hallo Calocybe
Erstmal danke für Deine Antwort.
»» if (document.forms.reset)
Geht leider auch nicht.
Ich hatte dieses Problem mal, als ich die replace()-Methode des location-Objektes verwenden wollte, die es erst seit JS1.1 gibt. Ich habe also ver-sucht, auf diese Weise das Vorhandensein der Methode zu ueberpruefen:
»» if (window.location.replace) window.location.replace("target.html");
Der Netscape 4.0 nimmt das gelassen hin und wechselt die Location. Ob er es wirklich kapiert hat, oder nur zufaellig das richtige macht, weiss ich nicht.
War wohl eher ein Zufall?!?
Um die Unterschiede der Browser zu erkennen, habe ich folgendes getestet:
1.) if(document.layers.irgendeinemethode)
2.) if(document.all.irgendeinemethode)
Folglich kann man auf diese Weise keine Objekt-Methoden abfragen. Mit den 3er-Browsern habe ich es erst gar nicht getestet, wenn es die 4rer schon nicht können...
Hat vielleicht jemand eine Idee, wie man das sonst noch probieren koennte?
By the way: Muss nach dem alert() im if-Zweig nicht erst ein Semikolon kommen, bevor es mit else weitergeht?
Ja, nach jeder Javascript-Anweisung sollte ein Semikolon stehen.
Mirko Richter
Hallo Mirko
»» if (document.forms.reset)
Geht leider auch nicht.
Schade :-(
Um die Unterschiede der Browser zu erkennen, habe ich folgendes getestet:
1.) if(document.layers.irgendeinemethode)
- NC4 führt die else-Anweisung aus
- MIE4 bringt eine Fehlermeldung
2.) if(document.all.irgendeinemethode)
- MIE4 führt die else-Anweisung aus
- NC4 bringt eine Fehlermeldung
Folglich kann man auf diese Weise keine Objekt-Methoden abfragen. Mit den 3er-Browsern habe ich es erst gar nicht getestet, wenn es die 4rer schon nicht können...
Hat vielleicht jemand eine Idee, wie man das sonst noch probieren koennte?
Mmh, aber ich verwende sehr gerne das Konstrukt
if (window.focus) window.focus();
und das funktioniert.
Netscape 4 mcht das Fenster aktiv, IE 4 auch; der IE 3 macht das nicht, denn das ist JS1.1, bringt aber auch keine Fehlermeldung. Vielleicht haengt es ja mit der Ebene des Objektes zusammen. Soll heissen, window ist auf der obersten Ebene, window.document.form schon auf der dritten. Vielleicht geht es ja nur mit einem First-Level-Objekt, denn statt window.focus() kann man ja auch nur focus() schreiben.
By the way: Muss nach dem alert() im if-Zweig nicht erst ein Semikolon kommen, bevor es mit else weitergeht?
Ja, nach jeder Javascript-Anweisung sollte ein Semikolon stehen.
Naja, aber if und else gehoeren doch irgendwie zusammen, deshalb meinte ich, es sei ein bisschen unlogisch. Wie auch immer, das Semikolon gehoert hin.
Calocybe