it-swarm.com.de

ist es möglich, ein Popup mit Javascript zu öffnen und zu erkennen, wann der Benutzer es schließt?

Die Frage ist so ziemlich alles im Titel.

Ist es möglich (und wie?), Ein Popup mit Javascript zu öffnen und zu erkennen, wann der Benutzer es schließt?

Ich verwende Jquery innerhalb des Projekts, daher wäre eine Jquery-Lösung gut. Prost!

62
Pablo

Wenn Sie die Kontrolle über den Inhalt des Popup-Fensters haben, behandeln Sie das Ereignis unload des Fensters und benachrichtigen Sie das ursprüngliche Fenster über die Eigenschaft opener. Überprüfen Sie zuerst, ob der Öffner geschlossen wurde. Beachten Sie, dass dies in Opera nicht immer funktioniert.

window.onunload = function() {
    var win = window.opener;
    if (!win.closed) {
        win.someFunctionToCallWhenPopUpCloses();
    }
};

Da das Ereignis unload ausgelöst wird, wenn der Benutzer von der Seite im Popup abweicht, und nicht nur, wenn das Fenster geschlossen wird, sollten Sie überprüfen, ob das Popup in someFunctionToCallWhenPopUpCloses tatsächlich geschlossen wurde:

var popUp = window.open("popup.html", "thePopUp", "");
function someFunctionToCallWhenPopUpCloses() {
    window.setTimeout(function() {
        if (popUp.closed) {
            alert("Pop-up definitely closed");
        }
    }, 1);
}

Wenn Sie keine Kontrolle über den Inhalt des Popup-Fensters haben oder wenn einer Ihrer Zielbrowser das Ereignis unload nicht unterstützt, werden Sie im Hauptfenster auf eine Art Abruflösung reduziert. Passen Sie das Intervall entsprechend an.

var win = window.open("popup.html", "thePopUp", "");
var pollTimer = window.setInterval(function() {
    if (win.closed !== false) { // !== is required for compatibility with Opera
        window.clearInterval(pollTimer);
        someFunctionToCallWhenPopUpCloses();
    }
}, 200);
88
Tim Down

Wenn Sie den jQuery-UI-Dialog verwenden können, hat er tatsächlich ein close-Ereignis.

6
eje211

Es gibt eine sehr einfache Lösung für Ihr Problem.

Erstellen Sie zuerst ein neues Objekt, das einen Popup wie folgt öffnet:

var winObj = window.open('http://www.google.com','google','width=800,height=600,status=0,toolbar=0');

Um zu wissen, wann dieses Popup-Fenster geschlossen ist, müssen Sie dies nur mit einer Schleife wie der folgenden überprüfen:

var loop = setInterval(function() {   
    if(winObj.closed) {  
        clearInterval(loop);  
        alert('closed');  
    }  
}, 1000); 

Jetzt können Sie die Warnung durch einen beliebigen JavaScript-Code ersetzen, den Sie möchten.

Habe Spaß! :)

5
Kshitij Mittal

Schauen Sie sich die Ereignisse unload und beforeunload window an. Wenn Sie diese überwachen, sollten Sie die Möglichkeit haben, zurückzurufen, wenn das DOM entladen wird, wenn das Fenster über Folgendes geschlossen wird:

var newWin = window.open('/some/url');
newWin.onunload = function(){
  // DOM unloaded, so the window is likely closed.
}
5
ajm

So öffnen Sie einen neuen Fensteraufruf:

var wnd = window.open("file.html", "youruniqueid", "width=400, height=300");

Wenn Sie nur wissen möchten, wann das Fenster geschlossen wird, verwenden Sie onunload.

wnd.onunload = function(){
    // do something
};

Wenn Sie vom Benutzer eine Bestätigung erhalten möchten, bevor er sie schließen kann, verwenden Sie onbeforeunload.

wnd.onbeforeunload = function(){
    return "are you sure?";
};
3
jAndy

Wir machen das in einem meiner Projekte bei der Arbeit.

Der Trick besteht darin, eine JS-Funktion in Ihrer übergeordneten Seite zu haben, die Sie aufrufen möchten, wenn das Popup geschlossen wird, und dann das Entladeereignis im Popup einhaken.

Die window.opener-Eigenschaft bezieht sich auf die Seite, die dieses Popup-Fenster erzeugt hat.

Wenn ich beispielsweise eine Funktion mit dem Namen callingPageFunction auf meiner Originalseite geschrieben habe, würde ich sie vom Popup aus wie folgt aufrufen:

$(window).unload(function() {
    window.opener.callingPageFunction()
});

Zwei Notizen:

  1. Dies sollte in einer Ready-Funktion verpackt sein.
  2. Ich habe eine anonyme Funktion, da Sie möglicherweise andere Logik verwenden möchten
3
Powerlord

Die einzige Möglichkeit, an die ich momentan denken kann, ist das Erstellen einer Funktion auf Ihrer übergeordneten Seite, die ein Timeout enthält, das nach 10 Sekunden aufgerufen wird. In der Funktion können Sie auch nach dem Wert eines Cookies suchen, um zu sehen, ob es wahr oder falsch ist. Wenn das Popup-Fenster geschlossen wird, setzen Sie ein Cookie auf "true".

Hoffe das hilft.

0
Ash Burlaczenko

Ja, behandeln Sie das Ereignis onbeforeUnload für das Popup-Fenster und rufen Sie dann eine Funktion im übergeordneten Fenster auf:

window.opener.myFunction()
0
TimS