Мне нужно выполнить какое-либо действие перед закрытием всплывающего окна (с помощью window.open
).
Что-то вроде хорошего будет:
var new_window = window.open('some url')
new_window.onBeforeUnload = function(){ my code}
Как я могу это достичь?
Мне нужно выполнить какое-либо действие перед закрытием всплывающего окна (с помощью window.open
).
Что-то вроде хорошего будет:
var new_window = window.open('some url')
new_window.onBeforeUnload = function(){ my code}
Как я могу это достичь?
Ваш пример будет работать до тех пор, пока URL всплывающего окна находится в том же домене, что и родительская страница, и вы измените событие на все строчные:
var new_window = window.open('some url')
new_window.onbeforeunload = function(){ /* my code */ }
В то время как принятый ответ является правильным для тех же самых источников, я нашел решение для всплывающих окон перекрестного происхождения:
var win = window.open('http://www.google.com');
var timer = setInterval(function() {
if(win.closed) {
clearInterval(timer);
alert('closed');
}
}, 1000);
Источник: atashbahar.com
Для тех, кто рассматривает возможность его использования.
Даже Facebook использует этот "хак" в своем Javascript SDK.
Вы можете убедиться в этом, посмотрев на их код. Просто найдите .closed
в https://connect.facebook.net/en_US/sdk.js.
Имя события onbeforeunload
, а не onbeforeunload
. JS чувствителен к регистру.
Вам нужно привязать событие onbeforeunload
к окну ПОСЛЕ его открытия.
Самый простой способ сделать это - иметь код javascript onbeforeunload в исходном коде окна.
Подробные объяснения см. в этих двух очень похожих вопросах здесь и здесь в Stackoverflow.
Как указано выше, вам нужно привязать событие onbeforeunload к окну после его открытия.
См. пример в другом потоке: fooobar.com/questions/155057/....
var new_window = window.open('some_url')
Вы также можете проверить, есть ли new_window.window
null
. Но вам нужно вручную проверить его с помощью функций setTimeout
или setInterval
.
Это единственный способ проверить, когда вы не находитесь в одном домене.