Wie kann ich Methoden bzw. Objekte auf "Null" überprüfen ?
speedy
- javascript
Hallo,
ich setze frameübergreifend Daten per Javascript-Methode bzw. direkt in ein Formular-Objekt rein. Da es sein kann, daß die Datei, in der die Methode aufgerufen werden soll bzw. das Objekt gesetzt werden soll, länger zum Laden benötigt, als die, aus der der Aufruf geschiet, möchte ich vor dem Aufruf testen, ob es das Objekt bzw. die Methode gibt und erst fortfahren, wenn die das Objekt geladen wurde. Wie mache ich das ?
Ich habe schon folgende Sachen ausprobiert:
while(!parent.framename.ducument.formularname.inputfeldname) {}
while(parent.framename.ducument.formularname.inputfeldname = null) {}
... aber es kommt immernoch die ganz richtige Fehlermeldung, daß das Objekt Null oder nicht bekannt ist ... mit diesem Test wollte ich diese Fehlermeldung aber eigentlich gerne unterdrücken. Jemand eine Idee ? ... die try/catch Überprüfung gibt es ja erst ab dem IE5 bzw. NS6 und das ist mir bißchen zu spät (es sollten mindestens die Versionen 4.x unterstützt werden)
MFG,
speedy
Hallo,
ich setze frameübergreifend Daten per Javascript-Methode bzw. direkt in ein Formular-Objekt rein. Da es sein kann, daß die Datei, in der die Methode aufgerufen werden soll bzw. das Objekt gesetzt werden soll, länger zum Laden benötigt, als die, aus der der Aufruf geschiet, möchte ich vor dem Aufruf testen, ob es das Objekt bzw. die Methode gibt und erst fortfahren, wenn die das Objekt geladen wurde. Wie mache ich das ?
Dafür existiert das onload event
<frameset onload="start();">
....
</frameset>
Ich habe schon folgende Sachen ausprobiert:
while(!parent.framename.ducument.formularname.inputfeldname) {}
while(parent.framename.ducument.formularname.inputfeldname = null) {}
Ein Vergleich wird so gestellt ==
und ein Objekt überprüfst du indem du auf den Typ testest:
alert(typeof objekt);
Struppi.
Hi,
Dafür existiert das onload event
<frameset onload="start();">
....
</frameset>
Hmm ... wann wird es dann beim Frameset gestartet ? ... wenn alle Dateien und Frames bzw. Framesets innerhalb dieses Framesets vollständig geladen wurden ? ... somit könnt ich das dann also im äußersten Frameset platzieren und ich setze dann im Start() in jedem mir wichtigen Frame eine Varibale "isLoaded", und die prüfe ich im Frame auf den Wert ab ... ist das der Ansatz, wie du ihn meinst ?
Ein Vergleich wird so gestellt ==
Ja, stimmt. Hab nur ein "=" vergessen gehabt.
alert(typeof objekt);
Hmm ... nen Dialogfenster will ich ja nicht ... in meinem Fall müßte ich dann also z.B. while(typeof(parent.framename.ducument.formularname.inputfeldname) == "undefined") machen ?
MFG,
speedy
Hi,
Dafür existiert das onload event
<frameset onload="start();">
....
</frameset>Hmm ... wann wird es dann beim Frameset gestartet ? ... wenn alle Dateien und Frames bzw. Framesets innerhalb dieses Framesets vollständig geladen wurden ? ... somit könnt ich das dann also im äußersten Frameset platzieren und ich setze dann im Start() in jedem mir wichtigen Frame eine Varibale "isLoaded", und die prüfe ich im Frame auf den Wert ab ... ist das der Ansatz, wie du ihn meinst ?
Nicht ganz, du brauchst keinen Wert mehr zu prüfen, weil der event gefeuert wird, wenn alle Frames geladen wurden.
Hmm ... nen Dialogfenster will ich ja nicht ... in meinem Fall müßte ich dann also z.B. while(typeof(parent.framename.ducument.formularname.inputfeldname) == "undefined") machen ?
100 Punkte.
Struppi.
Nicht ganz, du brauchst keinen Wert mehr zu prüfen, weil der event gefeuert wird, wenn alle Frames geladen wurden.
Ja, aber das weiß doch das einzelne Frame nicht bzw. die Methoden in einem einzelnen Frame - somit muß ich der doch noch sagen "Ok, du kannst jetzt in das andere Frame schreiben, da jetzt geladen" - oder wird mit start() im Frameset sämtliches Javascript unterhalb des Framesets in allen Frames dann erst ausgeführt ? - kann ich aber grad nicht im SelfHTML entdecken.
MFG,
speedy
Nicht ganz, du brauchst keinen Wert mehr zu prüfen, weil der event gefeuert wird, wenn alle Frames geladen wurden.
Ja, aber das weiß doch das einzelne Frame nicht bzw. die Methoden in einem einzelnen Frame - somit muß ich der doch noch sagen "Ok, du kannst jetzt in das andere Frame schreiben, da jetzt geladen" - oder wird mit start() im Frameset sämtliches Javascript unterhalb des Framesets in allen Frames dann erst ausgeführt ? - kann ich aber grad nicht im SelfHTML entdecken.
soweit ich weiß, ist dieses frameset-onload nicht dokumentiert, funktioniert aber in allen mir bekannten Browsern, so wie du es beschreibst
Es weiß übrigens auch nicht das Frame, sondern der Browser feuert die events und der weiß, wann alle Frames geladen sind.
Struppi.
Hi,
soweit ich weiß, ist dieses frameset-onload nicht dokumentiert, funktioniert aber in allen mir bekannten Browsern, so wie du es beschreibst
onload FRAMESET %Script; #IMPLIED F all the frames have been loaded
aus: http://www.w3.org/TR/html401/index/attributes.html
oder auch:
onload = script [CT]
The onload event occurs when the user agent finishes loading a window or all frames within a FRAMESET. This attribute may be used with BODY and FRAMESET elements.
aus http://www.w3.org/TR/html401/interact/scripts.html#adef-onload
cu,
Andreas
Hi,
while(!parent.framename.ducument.formularname.inputfeldname) {}
wirklich ducument?
Wie hast Du das ducument-Objekt definiert?
Oder willst Du das vordefinierte document benutzen?
while(parent.framename.ducument.formularname.inputfeldname = null) {}
wirklich ducument?
Hier weist Du dem inputfeldname auch noch null zu, anstatt mit == zu vergleichen.
Abgesehen davon: busy waiting ist nicht gerade optimal.
Wenn Du schon pollen mußt, dann mach das mit nem Timer (setTimeout...)
Besser wäre es, wenn das andere Dokument nach dem Laden die Aktion selbst auslöst...
... aber es kommt immernoch die ganz richtige Fehlermeldung, daß das Objekt Null oder nicht bekannt ist
parent.framename.ducument gibt es auch nur, wenn Du es selbst definiert hast. Im Gegensatz zu
parent.framename.document
^
^
cu,
Andreas
Hi,
wirklich ducument?
Jaaaa ... ok ok ok ... hab mich schlicht und einfach vertippt (und glatt in meiner anderen Antwort auch wieder falsch kopiert). Ich meinte natürlich document.
Hier weist Du dem inputfeldname auch noch null zu, anstatt mit == zu vergleichen.
Ja, auch vertippt, getestet habe ich es mit ==
Abgesehen davon: busy waiting ist nicht gerade optimal.
Ja, aber ne andere Möglichkeit sehe ich nicht.
(setTimeout...)
Das haut nicht wirklich hin, da ich ja nicht weiß, wie lange ich warten muß.
Besser wäre es, wenn das andere Dokument nach dem Laden die Aktion selbst auslöst...
Wäre schön, wenn ich das machen könnte, aber dann müßte ich in dem Dokument ja auch wieder testen, ob das andere Frame schon ordentlich geladen wurde - abgesehen davon will ich mit den Aufrufen Daten übergeben und das Zieldokument weiß ja nicht, wann neue Daten da sind zum abholen.
MFG,
speedy
Hi,
wirklich ducument?
Jaaaa ... ok ok ok ... hab mich schlicht und einfach vertippt (und glatt in meiner anderen Antwort auch wieder falsch kopiert). Ich meinte natürlich document.
Hier weist Du dem inputfeldname auch noch null zu, anstatt mit == zu vergleichen.
Ja, auch vertippt, getestet habe ich es mit ==
Wie wäre es, wenn Du den Code per Copy/Paste hier zur Verfügung stellst?
Ansonsten vertun wir hier sinnlos unsere Zeit und raten sinnlos an Fehlern rum, die im Originalcode nicht vorhanden sind...
Abgesehen davon: busy waiting ist nicht gerade optimal.
Ja, aber ne andere Möglichkeit sehe ich nicht.
(setTimeout...)
Das haut nicht wirklich hin, da ich ja nicht weiß, wie lange ich warten muß.
Dann warte z.B. 1 Sekunde, guck nach und falls es noch nicht soweit ist, wartest Du wieder 1 Sekunde.
cu,
Andreas