Mirko Richter: Objekt-Methoden abfragen

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

  1. 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

    1. 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)

      • 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?

      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

      1. 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