Знайте, когда всплывающее окно закрыто

У меня есть всплывающее окно с

var popup = window.open(URL, ...)

содержание всплывающего окна не находится под моим контролем.

Я хочу знать, когда всплывающее окно закрыто. Хотя я

$(popup).unload()

может помочь мне, но Firefox запускает событие unload, когда появляется всплывающее окно, а не когда оно закрыто!

Есть ли надежный способ узнать, когда всплывающее окно закрыто с помощью открывателя? Я не люблю опросить всплывающее окно каждые 500 мс, если оно закрыто...

(Я нашел это решение на Как узнать, когда всплывающее окно закрыто в JavaScript)

3 ответа

Если вы можете добавить onbeforeunloadeventhandler во всплывающем окне попробуйте что-то вроде этого,

родитель:

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.
};
Другие вопросы по тегам