Von neu geladener Seite die Existenz eines vorher geöffneten PopUps prüfen?

Hallo erstmal...

Folgendes ist mein Problem:

Ich habe ein Seite (im Folgenden bezeichne ich sie als Hauptseite), die einen iframe enthält. Dieser iframe lädt sich in regelmäßigen Abständen neu und öffnet über die Funktion "open_popup" onLoad ggf. ein PopUp. Dieses PopUp darf nur dann geöffnet werden, wenn es nicht schon offen ist. Daher findet mit der folgenden Funktion, die das Öffnen des PopUps übernimmt, zuerst eine Überprüfung statt, ob das PopUp schon offen ist. Dies geschieht jedes Mal, wenn der iframe sich neu lädt:

Code:
if (top.popup == undefined || top.popup.closed) {
	top.popup=window.open(...);
	top.popup.focus();
}

Ist top.popup == undefined, wurde das PopUp einfach noch nie geöffnet, ist top.popup.closed, wurde es schon geöffnet und wieder geschlossen. Trifft eines von beidem zu, soll das PopUp geöffnet werden. Logisch soweit. Ich verwende das "top", damit die Referenz auf das PopUp-Fenster auch dann noch zur Verfügung steht, wenn der iframe, in dem die Überprüfung stattfindet, neu geladen wurde. Ich kenn mich jetzt nicht so gut aus, aber ich stell mir das so vor, dass die Hauptseite die Referenz auf das PopUp in diesem Fall praktisch "behält".

Das Problem ist nun, dass dies natürlich nur funktioniert, wenn das Hauptfenster nicht auch neu geladen wird. Und genau in diesem Fall soll aber auch noch gewährleistet sein, dass sich das PopUp nicht neu lädt, wenn es bereits offen ist.

Interessanterweise verhalten sich hier der Internet Explorer und Mozilla unterschiedlich. Der Internet Explorer gibt als Wert von top.popup entweder "[object]" zurück, wenn das Fenster bereits geöffnet wurde (auch wenn es danach wieder geschlossen wurde) oder "undefined" wenn die Hauptseite neu geladen wurde, auch dann, wenn das PopUp noch geöffnet ist.

Mozilla gibt "[object]" zurück, wenn das PopUp geöffnet ist und der iframe neu geladen wird. Er gibt "null" zurück, wenn das PopUp wieder geschlossen ist und der iframe sich neu lädt und er gibt "undefined" zurück, wenn die Hauptseite neu geladen wird, unabhängig davon, ob das PopUp geöffnet ist oder nicht.

Warum gibt es im IE den Wert "null" in diesem Fall nie?

Das eigentlich Interessante (zumindest für mich) ist Folgendes: Im Mozilla lädt sich das PopUp überhaupt nicht neu, selbst wenn die Hauptseite neu geladen wird und die Funktion "open_popup" eigentlich bei Ihrer Überprüfung auf den Wert "undefined" stößt und das PopUp neu laden sollte. Das heißt, im Mozilla existiert mein Problem überhaupt nicht, im IE dagegen schon.

Ich bin mir jetzt nicht sicher, wie verständlich ich mich ausgedrückt habe, da ich selbst schon etwas verwirrt bin von dem Problem. Bei Unklarheiten einfach Fragen. Ich bin für jede Hilfe dankbar.

Wie lässt sich vom neu geladenen Hauptfenster aus überprüfen, ob das PopUp gerade geöffnet ist?

Danke im Voraus, ich hoffe auf Eure Hilfe!
 
Nachtrag:

Auch Mozilla bzw. Netscape machen mir das besagte Problem. Dass der Mozilla das PopUp vorhin nicht neu geladen hat, muss irgendwie damit zusammenhängen, dass ich mit "alert" vor dem "window.open" eine Ausgabe gemacht habe. Seit ich das zu Testzwecken eingebaute Alert rausgemacht habe, verhält sich der Mozilla wie der IE. Beide laden das PopUp neu. Shit!
 
Garnicht:(

Kürzlich gab es ein ähnliches Problem .

Du kannst vom Popup aus in regelmässigen Abständen eine Variable im Elternfenster setzen....z.B. eine Referenz auf das Popup selbst....so sollte das Popup auch nach dem Neuladen der Elternseite weiter ansprechbar sein.
 
Hmmm... Danke schon mal, das klingt nach nem vielversprechenden Ansatz...

Dazu hab ich jetzt noch ne Frage... Was hält denn mein PopUp nun für sein Elternfenster? Den iframe, von dem aus das popup geöffnet wurde, oder das Hauptfenster, dem ich mit "top.popup" ja das POpUP gewissermaßen untergeordnet habe?

Und wie kann ich vom PopUp aus eine Variable im Hauptfenster dann ansprechen bzw. ihr einen Wert zuweisen? Geht das dann mit einem einfachen: opener.variablexy = irgendwas?
 
Ach ja, noch ne Frage: Du meinst, ich soll ne Referenz auf das PopUp selbst in das Hauptfenster setzen. Klingt gut. Wie setz ich ne Referenz?

Sorry, ich weiß, ich programmiere hier Sachen, von denen ich nicht die leiseste Ahnung hab...
 
Die Auflösung!

Wow, hätte nie gedacht, dass ich das Problem heute nacht noch lösen kann, aber ich glaube, ich hab es geschafft.

Thanx an Fatalus, Du hast mir den richtigen Ansatz gegeben...

Für den Fall, dass der eine oder ander mit einem ähnlichen Problem hier mal reinschaut, kommt jetzt hier die Auflösung zum Problem:

Im PopUp hab ich folgendes verwendet:

Code:
opener.popupmeldung = "Hallo, hier bin ich";

setInterval("melden()",1000);
function melden() {
	opener.popupmeldung = "Hallo, hier bin ich";
}
function abmelden() {
	opener.popupmeldung = "closed";
}

Mit dieser Konstruktion "meldet sich das PopUp direkt beim Hauptfenster an", wenn ich das mal so nennen kann. Diese Meldung wiederholt das PopUp jede Sekunde. Wenn das PopUp geschlossen wird, wird onUnload die Funktion "abmelden()" aufgerufen, die dem hauptfenster die Meldung übergibt, dass das PopUp zu ist.

Da das PopUp ja nicht vom Hauptfenster selbst sondern von dem iframe im Hauptfenster geöffnet wird, darf die Funktion zum Öffnen natürlich nur direkt im Hauptfenster stehen, nicht in dem File, das im iframe ist. Vom iframe aus wird die function "open_popup" mit top.open_popup() aufgerufen. Da die Variable popupmeldung ja im Hauptfenster existiert, aber vom iframe aus überprüft werden muss, findet die Überprüfung so statt:

Code:
function popup() {
   if (typeof top.popupmeldung == 'undefined' || top.popupmeldung == 'closed') {
		top.open_popup(popup.php');
   }
}

Diese Funktion wird onLoad mit einer Verzögerung von 2 Sekunden mit setTimeout("popup()", 2000) aufgerufen, um sicherzustellen, dass die eventuelle Meldung vom bereits geöffneten PopUp schon existiert. Wenn das PopUp geschlosen wird, muss es sicht halt durch den Eintrag "closed" in der Variable top.popupmeldung im Hauptfenster abmelden, damit die Kontrollstruktur im iframe erkennt, dass sie das PopUp jetzt wieder öffnen darf.

Also ich hoffe mal, dass sich in meinen weiteren Tests nicht doch noch irgendein versteckter Fehler findet. Aber im Moment sieht es aus, als ob es läuft.

Zusammenfassend kann man sagen, ich verzichte jetzt komplett auf die Überprüfung des PopUp-Zustandes über die eigentliche Referenz auf das Fenster, da das Elternfenster beim reload diese Referenz ohnehin vergisst. Mit dieser Methode lässt sich diese Referenz aber sehr gut ersetzen, wie ich finde.

Thanx an Fatalus nochmal ;-)
 
:)
Schön, dass du deine Lösung so detailliert beschreibst..... so hat die Nachwelt auch was davon....und das Problem dürfte sicher noch öfter nachgefragt werden
 
Ja, ich denke auch, dass dies ein Problem ist, das des Öfteren vorkommen dürfte. Und eine detailierte Beschreibung der Problemlösung im Forum, in dem man seine Frage gestellt hat, halte ich für obligatorisch, da man ansonsten doch den eigentlichen Sinn und Zweck des Forums untergraben würde. Ich finde, es gibt nichts Schlimmeres, als wenn man in einem Forum einen Thread findet, in dem genau nach dem gefragt wird, was man gerade sucht und dann hört der Thread plötzlich auf mit "Okay, Danke, ich hab mein Problem mittlerweile gelöst". Und Punkt. Dann steht man nämlich wirklich hilflost da.
 

Neue Beiträge

Zurück