Variablenabfrage in anderem Fame...

tomate

Erfahrenes Mitglied
Das Abfraben einer Variable in einem anderem Frame ist kein Problem. Das Problem besteht darin, das der obere Frame die Variable aus dem untern Frame auslesen soll. Ist der untere Frame aber noch nicht vollständig geladen, gibt es die Fehlermeldung "parent.inhalt.headline ist null oder kein Objekt".

Wie kann man dieses Problem beheben?

Viele Grüsse
tomate
 
Du könntest entweder die Sache umdrehen....vom unteren Frame aus diese Variable ans obere Frame "senden", oder im oberen Frame per setInterval() solange probieren, die Variable zu ermitteln, bis sie existiert.
 
also der Hinweis mit setinterval() war schon mal sehr gut. Löst zwar nicht mein aktuelles Problem, dafür aber ein anderes.

Dafür habe ich was anderes herausgefunden. Das die Fehlermeldung "parent.inhalt.headline ist null oder kein Objekt" erscheint, hat nichts damit zu tun, das die Variable im Frame "inhalt" noch nicht gesetzt ist, sondern erschein offensichtlich nur dann, wenn der untere Frame "inhalt" noch gar nicht existiert, wenn vom oberen Frame die
Frage "if (!parent.inhalt.headline && zurueck == "")" gestellt wird.

Das ist ja eigentlich auch logisch, da die Abfrage "if (!parent.inhalt.headline && zurueck == "")" ja auch nichts zurückgeben kann.

Die Frage ist also, kann ich eine Funktion so steuern, das diese erst aufgerufen wird, wenn der untere Frame "inhalt" auch wirlich existiert?

Viele Grüsse
tomate
 
Jo....klar kannst du das.
Am einfachsten ist es, wenn du die Funktion vom iFrame heraus aufrufst....denn dann ist es ganz sicher geladen:)

Code:
parent.funktionsname();
 
Hallo,

ja, das stimmt schon. Die Sache hat nur einen Hacken.
Angenommen der obere Frame existiert noch nicht, dann kann nicht funktion logischerweise auch nicht aufgerufen werden. Jetzt könnte man hergehen und mit
setTimeout sie Funktion solange laufen lassen, bis diese eine Bestätigung vom oberen Frame bekommt. Man müsste also im oberen Frame irgendwas einbauen, was eine Info an den unteren Frame schickt wenn es fertig geladen hat. Aber, das funktioniert leider auch nicht, da es ja möglich wäre, das der untere noch gar nicht existiert, wenn der obere schon fertig ist.

Blickt noch jemand durch....ich nicht.... :)

Das Problem ist doch folgendes:
Die Abfrage "if (parent.inhalt.headline)" erzeugt immer einen Fehler, wenn der Frame inhalt noch nicht existiert. Dann gibt es die Fehlermeldung "document.inhalt.headline ist kein Objekt". Ist der Frame inhalt z.B.: fertig geladen, jedoch die var headline gar nicht definiert, wird der weitere Code nicht ausgeführt und es gibt aber auch keine Fehlermeldung! Das ist der entscheidende Unterschied.

So, wenn mir jetzt noch jemand weiterhelfen kann wäre das echt cool...

Viele Grüsse
tomate
 
Hi,

vielleicht könntest Du mit Hilfe von try-catch auf einen Fehler testen. Tritt ein solcher
auf, setzt Du eine Testvariable auf false und durchläufst eine Schleife erneut.
Code:
do{
    boolTest = true;
    try{
        parent.inhalt.headline;
    }catch(e){
        boolTest = false;  // Bei Fehler wieder auf false setzen
    }
}while(boolTest == false);
Ich konnte das Ganze nicht testen - versuch's einfach.

Ciao
Quaese
 
Oder mit typeof....damit kannst du den Typ eines Objektes(Variable,Funktion etc.) abfragen..... ist das Objekt nicht vorhanden, gibt es keinen Fehler, sondern es wird "undefined" zurückgegeben.

Code:
if (typeof parent.inhalt.headline!='undefined')
{
//headline ist da
}
 
Zuletzt bearbeitet:
Hallo,

ich werd noch zum Hirsch.
Die Variante mit try and catch funktioniert mit DOM Browsern einwandfrei. Netscape 4.x erzeugt jedoch eine Fehlermeldung, obwohl ich den Code über eine if-Abfrage eigentlich nur für DOM-Browser ausführen lasse.
Die Fehlermeldung lautet: "try is a reserved identifier."

Was ist das den jetzt schon wieder?

Viele Grüsse
tomate
 
Problem "wahrscheinlich" gelöst. Für alle die es interessiert...

Bevor man eine Var von einem Frame in einem anderen Frame z.B.: mit:
if (parent.inhalt.headline) abfrägt, muss man zuvor mit if (parent.inhalt) prüfen, ob der Frame überhaupt vorhanden ist.

if (parent.inhalt)
{
if (parent.inhalt.headline) alert("binda");
}

Die Abfrage "if (parent.inhalt)" erzeugt nie einen Fehler, ganz im Gegensatz zu
"if (parent.inhalt.headline)", sollte der Frame "inhalt" nicht vorhanden sein.

Wenn man diese Abfrage jetzt noch mit setInterval() verbindet steht einer gesicherten Var-Übergabe zwischen Frames nichts mehr im Wege. Und in diesem Fall funktioniert es auch mit Steinzeitbrowsern a'la NC4.x oder IE 4.x.

Viele Grüsse
tomate
 
Zurück