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

Вопрос - в значительной степени все в заголовке.

Действительно ли это возможно (и как?), чтобы открыть всплывающее окно с JavaScript и затем обнаружить, когда пользователь закрывает его?

Я использую jQuery в рамках проекта, таким образом, решение jQuery было бы хорошо.Удачи!

66
задан Pablo 20 July 2010 в 15:37
поделиться

6 ответов

Если у вас есть контроль над содержимым всплывающего окна, обработайте в нем событие unload и уведомите исходное окно через свойство открыватель , сначала проверяя, был ли закрыт открыватель. Обратите внимание, что это не всегда работает в Opera.

window.onunload = function() {
    var win = window.opener;
    if (!win.closed) {
        win.someFunctionToCallWhenPopUpCloses();
    }
};

Поскольку событие unload будет срабатывать всякий раз, когда пользователь уходит со страницы во всплывающем окне, а не только при закрытии окна, вы должны проверить, действительно ли всплывающее окно закрылось в someFunctionToCallWhenPopUpCloses :

var popUp = window.open("popup.html", "thePopUp", "");
function someFunctionToCallWhenPopUpCloses() {
    window.setTimeout(function() {
        if (popUp.closed) {
            alert("Pop-up definitely closed");
        }
    }, 1);
}

Если у вас нет контроля над содержимым всплывающего окна или если один из ваших целевых браузеров не поддерживает событие unload , вы уменьшены какое-то решение для опроса в главном окне. Отрегулируйте интервал по своему усмотрению.

var win = window.open("popup.html", "thePopUp", "");
var pollTimer = window.setInterval(function() {
    if (win.closed !== false) { // !== is required for compatibility with Opera
        window.clearInterval(pollTimer);
        someFunctionToCallWhenPopUpCloses();
    }
}, 200);
90
ответ дан 24 November 2019 в 15:02
поделиться

Попробуйте изучить события unload и beforeunload окна. Мониторинг этих событий должен дать вам возможность вызвать обратный вызов, когда DOM выгружается при закрытии окна, примерно так:

var newWin = window.open('/some/url');
newWin.onunload = function(){
  // DOM unloaded, so the window is likely closed.
}
6
ответ дан 24 November 2019 в 15:02
поделиться

Если вы можете использовать jQuery UI Dialog, у него действительно есть событие close.

6
ответ дан 24 November 2019 в 15:02
поделиться

Чтобы открыть новое окно, вызовите:

var wnd = window.open("file.html", "youruniqueid", "width=400, height=300");

Если вы просто хотите знать, когда это окно будет закрыто, используйте onunload .

wnd.onunload = function(){
    // do something
};

Если вы хотите получить подтверждение от пользователя перед тем, как закрыть его, используйте перед загрузкой .

wnd.onbeforeunload = function(){
    return "are you sure?";
};
3
ответ дан 24 November 2019 в 15:02
поделиться

Мы делаем это в одном из моих проектов на работе.

Уловка состоит в том, чтобы на родительской странице была функция JS, которую вы планируете вызывать при закрытии всплывающего окна, а затем перехватить событие выгрузки во всплывающем окне.

Свойство window.opener относится к странице, которая породила это всплывающее окно.

Например, если бы я написал функцию с именем callPageFunction на моей исходной странице, я бы вызвал ее из всплывающего окна следующим образом:

$(window).unload(function() {
    window.opener.callingPageFunction()
});

Два примечания:

  1. Это должно быть завернуто в готовый функция.
  2. У меня есть анонимная функция, потому что вам может понадобиться другая логика.
3
ответ дан 24 November 2019 в 15:02
поделиться

Да, обработайте событие onbeforeUnload для всплывающего окна, а затем вызовите функцию на родительском окне, используя:

window.opener.myFunction()
0
ответ дан 24 November 2019 в 15:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: