Stefan: PopUp Fenster auf Beständigkeit laufend überprüfen ...

Hei @all

Ich hoffe, dass mir jemand von Euch weiterhelfen kann.

Ich habe eine Link, wenn man diesen aktiviert öffnet sich ein PopUp-Fenster.
Hier der Quellcode des PopUp-Fensters :

function fenster_bericht()
{
var fenster_bericht = window.open("bericht.php", "Bericht", "width=300, height=190, dependent=yes, locationbar=no, menubar=no, resizable=no, status=no");
fenster_check();
}

function fenster_check()
{
if(fenster_bericht.closed==true) alert("Fenster wurde geschlossen!");
else alert("Fenster offen!");

window.setTimeout("fenster_check()", 3000);
}

Testweise hab ich den Funktionsaufruf auf 3 Sekunden gesetzt, sprich alle 3 Sekunden sollte vom "Eltern-Fenster" aus überprüft werden, ob das PopUp noch existiert oder nicht. Wenn ja, also wenn es geschlossen wurde (macht das PopUp nach Eintragung automatisch) soll das Eltern-Fenster neu geladen werden, das es eine Textdatei-ausliest, die mit dem Pop-Up geschrieben wurde (testweise hier die alert()-Befehle).
Allerdings klappt das nicht, und ich bekomme immernur die Meldung, dass das Fenster offen wäre, wobei es eigentlich scho längst geschlossen wurde.
Eigentlich müsste der Quellcode stimmen, oder habe ich da einen Denkfehler?
Ich hoffe, dass mir jemand weiterhelfen kann!

Besten Dank im voraus!

Mit freundlichen Grüssen,
Stefan

  1. Moin!

    Ich habe eine Link, wenn man diesen aktiviert öffnet sich ein PopUp-Fenster.
    Hier der Quellcode des PopUp-Fensters :

    function fenster_bericht()
    {
    var fenster_bericht = window.open("bericht.php", "Bericht", "width=300, height=190, dependent=yes, locationbar=no, menubar=no, resizable=no, status=no");
    fenster_check();
    }

    Im Parameter-String bitte keinerlei Leerzeichen haben! Sonst funktioniert das Öffnen in einigen Browsern (vor allem Netscape 4) nicht ordentlich.

    function fenster_check()
    {
    if(fenster_bericht.closed==true) alert("Fenster wurde geschlossen!");
    else alert("Fenster offen!");

    window.setTimeout("fenster_check()", 3000);
    }

    Tja, wenn du in der Funktion "fenster_bericht" eine lokale Variable "fenster_bericht" definierst, ist irgendwie klar, daß das System auseinanderfliegt.

    Erstens finde ich den Namenskonflikt (Funktionsname und Variablenname identisch) böse - du solltest dir für eins von beiden einen neuen Namen ausdenken.

    Und zweitens: Wenn du die Fenster-Variable lokal definierst (var variable innerhalb der Funktion - das wird beim Verlassen der Funktion vergessen!), dann kannst du natürlich später nicht mehr auf das Fenster zugreifen, und fenster_bericht.closed ist immer false.

    Ich habe mich mit Fenster-Variablen auch schon abgemüht und bin nicht 100% durchgestiegen, aber eines dürfte klar sein:

    Definiere außerhalb aller Funktionen eine Variable, der du dann das offene Fenster innerhalb der Funktion zuweist - nur dann kriegen alle Funktionen den Variableninhalt mit.

    Außerdem gibts sicherlich noch andere Methoden, deine Aufgabe zu lösen: Ein Fenster schließt sich ja nicht einfach von selbst. Entweder schließt du es per Skript - dann kannst du vorher auch die Aktion im Elternfenster aufrufen, weil du dann ja ohnehin Javascriptmäßig "am Drücker" bist.

    Oder der User schließt das Fenster - dann kannst du immer noch mit "onunload" eine Funktion aufrufen. Die wird auch aufgerufen, wenn die Seite im Popup anderweitig verlassen wird (z.B. durch Link oder Abschicken eines Formulars, aber das kann man ja unterscheiden).

    Außerdem: Wenn ein Formular abgeschickt wird, kannst du "onsubmit" (da sind die Formulardaten aber noch nicht abgeschickt) oder auf der immer erforderlichen Ergebnisseite Javascriptcode ausführen lassen, um ein Neuladen zu veranlassen - und dann das Fenster gleich selbst zu schließen.

    - Sven Rautenberg

    1. Hei Sven!

      Vielen Dank für Deine Antwort!

      Also das mit der Lokalen Variable is logisch und des hab ich schlicht und einfach übersehen, man lernt eben nie aus ;-)
      Das mit den identischen Namen der Variable bzw. der Funktion hab ich bereits geändert, allerdings nach diesem Posting erst.

      Also jedenfalls klappts etz mit der lokalen Variable und mit dem überprüfen des Fensters.
      Sicherlich gibt es noch andere Möglichkeiten, ich hab auch diese, die Du oben beschrieben hast eigentlich vorgehabt, nur leider weiss ich grad nicht, wie man auf das Elternfenster vom PopUp zurückgreift. Sicherlich wieder ein logischer 0815-(Denk)Fehler meinerseits. Das Elternfenster besteht aus einem Frameset, wenn man aber vom PopUp auf das via "(top.)parent.main(<- Hauptfenster).location.reload()" zurückgreift, geht es aber nicht - wie kann man dann das Elternfenster ansprechen?? Sonst wärs sicherlich ganz easy über "unLoad()" oder bei aktivieren eines Links etc.

      Naja, jedenfalls merci Dir!

      MfG
      Stefan ;-)

      1. Hallo Stefan

        Sicherlich gibt es noch andere Möglichkeiten, ich hab auch diese, die Du oben beschrieben hast eigentlich vorgehabt, nur leider weiss ich grad nicht, wie man auf das Elternfenster vom PopUp zurückgreift.

        opener ist das Zauberwort. opener.deineFunktion() macht was du willst.

        Viele Grüße

        Antje