Знайте, когда всплывающее окно закрыто
У меня есть всплывающее окно с
var popup = window.open(URL, ...)
содержание всплывающего окна не находится под моим контролем.
Я хочу знать, когда всплывающее окно закрыто. Хотя я
$(popup).unload()
может помочь мне, но Firefox запускает событие unload, когда появляется всплывающее окно, а не когда оно закрыто!
Есть ли надежный способ узнать, когда всплывающее окно закрыто с помощью открывателя? Я не люблю опросить всплывающее окно каждые 500 мс, если оно закрыто...
(Я нашел это решение на Как узнать, когда всплывающее окно закрыто в JavaScript)
3 ответа
Если вы можете добавить onbeforeunload
event
handler
во всплывающем окне попробуйте что-то вроде этого,
родитель:
function parentCallback(){
alert("popup is closed");
}
var popup = window.open(URL, ...);
НЕОЖИДАННО ВОЗНИКНУТЬ:
window.onbeforeunload = function(){
window.opener.parentCallback();
self.close();
};
еще использовать interval
Вот что я мог бы предложить, что-то вроде
var pop_win = window.open(url,...);
var timer = setInterval(function() {
if(pop_win.closed) {
clearInterval(timer);
alert('popup is closed');
}
}, 1000);
Кажется, popup.location вернет null, если он закрыт, и пустой набор, если он открыт.
popup.location // Open Window
=> Location
No Properties Defined
popup.location // Closed Window
=> null
Тест с:
if (popup.location) {alert('hello')}
Я знаю, что этот вопрос немного устарел, но для тех, кто ищет ответ, я думаю, что нашел решение:
Вы могли бы быть в состоянии сделать это (это сработало для меня в любом случае, также в FF):
родитель:
var popup = window.open("about:blank"); // Or whatever page you are loading
popup.onunload = function(){
parent.location.reload();
// or
parent.alert("Popup closed!");
// or any other handler in the parent window,
// just remember to call it on the parent object.
};