Подтвердить что ты не робот

Возможно ли открыть всплывающее окно с javascript, а затем определить, когда пользователь его закрывает?

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

Возможно ли (и как?) открыть всплывающее окно с javascript, а затем определить, когда пользователь его закрыл?

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

4b9b3361

Ответ 1

Если у вас есть контроль над содержимым всплывающего окна, обработайте событие unload окна и сообщите исходное окно с помощью свойства opener, сначала проверьте, закрыт ли открыватель. Обратите внимание, что это не всегда будет работать в 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);

Ответ 2

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

Ответ 3

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

var newWin = window.open('/some/url');
newWin.onunload = function(){
  // DOM unloaded, so the window is likely closed.
}

Ответ 4

Чтобы открыть вызов нового окна:

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

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

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

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

wnd.onbeforeunload = function(){
    return "are you sure?";
};

Ответ 5

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

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

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

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

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

Две заметки:

  • Это должно быть завершено в готовой функции.
  • У меня есть анонимная функция, потому что вам может понадобиться другая логика.

Ответ 6

Существует очень простое решение вашей проблемы.

Сначала создайте новый объект, который откроет поп, как это:

var winObj = window.open('http://www.google.com','google','width=800,height=600,status=0,toolbar=0');

Чтобы узнать, когда это всплывающее окно закрыто, вам нужно просто проверить это с помощью следующего цикла:

var loop = setInterval(function() {   
    if(winObj.closed) {  
        clearInterval(loop);  
        alert('closed');  
    }  
}, 1000); 

Теперь вы можете заменить предупреждение на любой код javascript, который вы хотите.

Получайте удовольствие!:)

Ответ 7

Единственный способ, о котором я могу думать в данный момент, - создать функцию на родительской странице с тайм-аутом в ней, которая вызывает себя через 10 секунд. В функции вы также можете проверить значение cookie, чтобы увидеть, истинно это или ложно. Когда всплывающее окно закрывается, установите cookie в true.

Надеюсь, что это поможет.

Ответ 8

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

window.opener.myFunction()