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 unloadEreignis des Fensters dort und benachrichtigen Sie das ursprüngliche Fenster über die openerEigenschaft. Ü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 unloadEreignis 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 unloadEreignis 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);
unloadEreignisses, da sie mit mehr Browsern kompatibel ist (siehe opera-bugs.jottit.com ).
window.closed !== falsein 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 unloadund beforeunloadFenster 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.
}
unloadEreignis im Popup behandeln.
unload.
Wenn Sie das jQuery-UI-Dialogfeld verwenden können , hat es tatsächlich ein closeEreignis.
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?";
};
unloadEreignis 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 callingPageFunctionauf meiner Originalseite benannte Funktion geschrieben hätte, würde ich sie im Popup folgendermaßen aufrufen:
$(window).unload(function() {
window.opener.callingPageFunction()
});
Zwei Anmerkungen: