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!
javascript
jquery
popup
Pablo
quelle
quelle
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 dieopener
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 wurdesomeFunctionToCallWhenPopUpCloses
: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);
quelle
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 weiterhinEs 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ß! :) :)
quelle
Versuchen Sie, die Ereignisse
unload
undbeforeunload
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. }
quelle
unload
Ereignis im Popup behandeln.unload
.Wenn Sie das jQuery-UI-Dialogfeld verwenden können , hat es tatsächlich ein
close
Ereignis.quelle
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?"; };
quelle
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:
quelle
Ich denke, der beste Weg ist:
const popup = this.window.open(url.toString()); popup.addEventListener('unload', ()=> console.log('closed'))
quelle
Ja, behandeln Sie das Ereignis onbeforeUnload für das Popup-Fenster und rufen Sie dann eine Funktion im übergeordneten Fenster auf, indem Sie:
window.opener.myFunction()
quelle