Ich muss eine Aktion ausführen, bevor ein Popup-Fenster (mit window.open
) geschlossen wird.
So etwas wird gut sein:
var new_window = window.open('some url')
new_window.onBeforeUnload = function(){ my code}
Wie kann ich das erreichen?
javascript
dom-events
xiaohan2012
quelle
quelle
Obwohl die akzeptierte Antwort für denselben Ursprung korrekt ist, habe ich eine Lösung für Popups mit unterschiedlichem Ursprung gefunden:
var win = window.open('http://www.google.com'); var timer = setInterval(function() { if(win.closed) { clearInterval(timer); alert('closed'); } }, 1000);
Quelle: atashbahar.com
Für diejenigen, die es in Betracht ziehen.
Sogar Facebook verwendet diesen "Hack" in seinem Javascript SDK .
Sie können dies überprüfen, indem Sie sich den Code ansehen. Suchen Sie einfach nach
.closed
in https://connect.facebook.net/en_US/sdk.js .quelle
var win = window.open('https://www.google.com/')
Wenn der Benutzer Popups zulässt, enthält diewin
Variable das erwartete Objekt. Natürlich müssen Sie dies mit einem vom Benutzer ausgelösten Ereignis aufrufen. (zBonClick
auf etwas)Der Ereignisname ist
onbeforeunload
und nichtonBeforeUnload
. JS unterscheidet zwischen Groß- und Kleinschreibung.quelle
Sie müssen das
onbeforeunload
Ereignis an das Fenster binden , nachdem es geöffnet wurde.Der einfachste Weg, dies zu tun, wäre, das Javascript vor dem Herunterladen des Codes im Fensterquellcode zu haben.
Ausführliche Erklärungen finden Sie in diesen beiden sehr ähnlichen Fragen hier und hier zu Stackoverflow.
quelle
onbeforeunload
undonunload
muss begrenzt werden, nachdem das untergeordnete Fenster geladen wurde, um korrekt zu funktionieren.Wie bereits erwähnt, müssen Sie das onbeforeunload Ereignis an das Fenster binden , nachdem sie geöffnet wird.
Siehe Beispiel in einem anderen Thread: https://stackoverflow.com/a/25989253/578275 .
quelle
var new_window = window.open('some_url')
Sie können auch überprüfen, ob dies der Fall
new_window.window
istnull
. Sie müssen es jedoch manuell mitsetTimeout
odersetInterval
Funktionen überprüfen .Dies ist übrigens die einzige Möglichkeit, dies zu überprüfen, wenn Sie sich nicht in derselben Domain befinden.
quelle