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?
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?
Antworten:
Ihr Beispiel funktioniert so lange, wie sich die URL des Popup-Fensters in derselben Domäne wie die übergeordnete Seite befindet und Sie das Ereignis in Kleinbuchstaben ändern:
var new_window = window.open('some url')
new_window.onbeforeunload = function(){ /* my code */ }
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 .
var win = window.open('https://www.google.com/')
Wenn der Benutzer Popups zulässt, enthält die win
Variable das erwartete Objekt. Natürlich müssen Sie dies mit einem vom Benutzer ausgelösten Ereignis aufrufen. (zB onClick
auf etwas)
Der Ereignisname ist onbeforeunload
und nicht onBeforeUnload
. JS unterscheidet zwischen Groß- und Kleinschreibung.
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.
onbeforeunload
und onunload
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 .
var new_window = window.open('some_url')
Sie können auch überprüfen, ob dies der Fall new_window.window
ist null
. Sie müssen es jedoch manuell mit setTimeout
oder setInterval
Funktionen überprüfen .
Dies ist übrigens die einzige Möglichkeit, dies zu überprüfen, wenn Sie sich nicht in derselben Domain befinden.