Можно ли вызвать некоторый JS, когда пользователь закрывает окно?
Я искал обработчики событий JS и нашел только onunload, который вызывает script, когда пользователь покидает страницу, не обязательно закрывая окно.
Предполагаемое использование - вызов AJAX script, который отключает несколько сеансов, относящихся к всплывающему окну. Может быть, возможно, нет лучшего способа достижения этой цели?
Я нашел этот поток DevShed, в котором говорится, что это возможно через JS, но он не объясняет точно, как вызвать script.
К сожалению, большинство поисковых запросов Google для этого решения вызывают window.close, что фактически противоположно тому, что мне нужно!
Ответ 1
Следующий код работает в Firefox, IE 8 и Google Chrome.
В открывшемся окне
<script src="http://ajax.googleapis.com/ajax/libs/mootools/1.2.3/mootools-yui-compressed.js"></script>
<script>
function on_popup_close(){
//put your code here
alert('it closed');
}
</script>
В всплывающем окне
<script>
function inform_parent(){
opener.on_popup_close();
}
window.onbeforeunload = inform_parent;
</script>
Первая строка в коде для окна открытия может быть вашей любимой средой, которая реализует оператор знака доллара.
Смотрите мою демонстрацию здесь
Ответ 2
вы можете проверить из родительского окна, если дочернее окно все еще существует (например, проверять каждые 100 мс или около того) и запускать script, если нет...
Ответ 3
Посмотрите на свойство window.opener
. За исключением IE, он имеет довольно хорошую поддержку. Вы можете использовать его для вызова некоторых функций javascript в своем родительском окне до window.close()
с вашим всплывающим окном.
Ответ 4
Не знаю, работает ли это на практике, но если проблема связана с внутренними страницами, почему бы не задавать глобальную переменную какого-либо типа всякий раз, когда ссылка нажимается на странице, и проверяйте ее для onunload?
Что-то вроде (извините jQuery, я очень ленив):
INTERNAL_CLICKED = false;
$("a").click(function() {
INTERNAL_CLICKED = true;
});
window.onunload = function() {
if(!INTERNAL_CLICKED) {
// perform window unload code
}
}
Повторить, полностью непроверенный, но кто знает - он может просто работать для вас. Хотя, я бы остерегался, что, вероятно, тоже загорится на обновлении.
Ответ 5
Привет Вы можете использовать следующую функцию в событии onbeforeunload
, запущенном window
непосредственно перед window.close
window.onbeforeunload = function () {
// stuff do do before the window is unloaded here.
}
сообщите мне, если это не решит проблему ur