Вопрос в значительной степени касается названия.
Возможно ли (и как?) открыть всплывающее окно с javascript, а затем определить, когда пользователь его закрыл?
Я использую jquery внутри проекта, поэтому решение jquery будет хорошим. Ура!
Вопрос в значительной степени касается названия.
Возможно ли (и как?) открыть всплывающее окно с javascript, а затем определить, когда пользователь его закрыл?
Я использую jquery внутри проекта, поэтому решение jquery будет хорошим. Ура!
Если у вас есть контроль над содержимым всплывающего окна, обработайте событие 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);
Если вы можете использовать jQuery UI Dialog, на самом деле он имеет событие close
.
Попробуйте найти unload
и beforeunload
событий окна. Мониторинг этих данных должен дать вам возможность перезвонить, когда DOM выгружается, когда окно закрывается через что-то вроде этого:
var newWin = window.open('/some/url');
newWin.onunload = function(){
// DOM unloaded, so the window is likely closed.
}
Чтобы открыть вызов нового окна:
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?";
};
Мы делаем это в одном из моих проектов на работе.
Уловка заключается в том, чтобы на вашей родительской странице была создана функция JS, которую вы планируете вызывать, когда всплывающее окно закрывается, а затем перехватывает событие разгрузки во всплывающем окне.
Свойство window.opener
ссылается на страницу, которая породила это всплывающее окно.
Например, если я написал функцию с именем callingPageFunction
на моей исходной странице, я бы назвал ее из всплывающего окна следующим образом:
$(window).unload(function() {
window.opener.callingPageFunction()
});
Две заметки:
Существует очень простое решение вашей проблемы.
Сначала создайте новый объект, который откроет поп, как это:
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, который вы хотите.
Получайте удовольствие!:)
Единственный способ, о котором я могу думать в данный момент, - создать функцию на родительской странице с тайм-аутом в ней, которая вызывает себя через 10 секунд. В функции вы также можете проверить значение cookie, чтобы увидеть, истинно это или ложно. Когда всплывающее окно закрывается, установите cookie в true.
Надеюсь, что это поможет.
Да, обработайте событие onbeforeUnload для всплывающего окна, а затем вызовите функцию в родительском окне, используя:
window.opener.myFunction()