Die Frage ist so ziemlich alles im Titel.
Ist es möglich (und wie?), Ein Popup mit Javascript zu öffnen und dann zu erkennen, wann der Benutzer es schließt?
Ich verwende jquery innerhalb des Projekts, daher wäre eine jquery-Lösung gut. Prost!
Die Frage ist so ziemlich alles im Titel.
Ist es möglich (und wie?), Ein Popup mit Javascript zu öffnen und dann zu erkennen, wann der Benutzer es schließt?
Ich verwende jquery innerhalb des Projekts, daher wäre eine jquery-Lösung gut. Prost!
Antworten:
Wenn Sie die Kontrolle über den Inhalt des Popups haben, behandeln Sie das unload
Ereignis des Fensters dort und benachrichtigen Sie das ursprüngliche Fenster über die opener
Eigenschaft. Überprüfen Sie zunächst, 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 unload
Ereignis immer dann ausgelöst wird, wenn der Benutzer von der Seite im Popup weg navigiert und nicht nur, wenn das Fenster geschlossen ist, sollten Sie überprüfen, ob das Popup tatsächlich geschlossen wurde someFunctionToCallWhenPopUpCloses
:
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 Popups haben oder wenn einer Ihrer Zielbrowser das unload
Ereignis nicht unterstützt , werden Sie im Hauptfenster auf eine Art Abfragelösung reduziert. Passen Sie das Intervall 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);
unload
Ereignisses, da sie mit mehr Browsern kompatibel ist (siehe opera-bugs.jottit.com ).
window.closed !== false
in Opera?
window.clearInterval()
Anruf auf keinen Fall vergessen . Wenn es nicht enthalten ist, wird die ursprüngliche Seite weiterhin
Es gibt eine sehr einfache Lösung für Ihr Problem.
Erstellen Sie zuerst ein neues Objekt, das einen Pop 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.
Habe Spaß! :) :)
Versuchen Sie, die Ereignisse unload
und beforeunload
Fenster zu untersuchen. 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.
}
unload
Ereignis im Popup behandeln.
unload
.
Wenn Sie das jQuery-UI-Dialogfeld verwenden können , hat es tatsächlich ein close
Ereignis.
So öffnen Sie einen neuen Fensteraufruf:
var wnd = window.open("file.html", "youruniqueid", "width=400, height=300");
Wenn Sie nur wissen möchten, wann dieses Fenster geschlossen wird, verwenden Sie onunload
.
wnd.onunload = function(){
// do something
};
Wenn Sie eine Bestätigung vom Benutzer wünschen, bevor der Benutzer sie schließen kann, verwenden Sie onbeforeunload
.
wnd.onbeforeunload = function(){
return "are you sure?";
};
unload
Ereignis im Popup-Dokument behandeln.
Wir machen das in einem meiner Projekte bei der Arbeit.
Der Trick besteht darin, eine JS-Funktion auf Ihrer übergeordneten Seite zu haben, die Sie beim Schließen des Popups aufrufen möchten, und dann das Entladeereignis in das Popup einzubinden.
Das window.opener
Eigenschaft bezieht sich auf die Seite, auf der dieses Popup erstellt wurde.
Wenn ich beispielsweise eine callingPageFunction
auf meiner Originalseite benannte Funktion geschrieben hätte, würde ich sie im Popup folgendermaßen aufrufen:
$(window).unload(function() {
window.opener.callingPageFunction()
});
Zwei Anmerkungen: