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

Вызовите некоторый JavaScript, когда пользователь закрывает окно (всплывающее окно)

Можно ли вызвать некоторый JS, когда пользователь закрывает окно?

Я искал обработчики событий JS и нашел только onunload, который вызывает script, когда пользователь покидает страницу, не обязательно закрывая окно.

Предполагаемое использование - вызов AJAX script, который отключает несколько сеансов, относящихся к всплывающему окну. Может быть, возможно, нет лучшего способа достижения этой цели?

Я нашел этот поток DevShed, в котором говорится, что это возможно через JS, но он не объясняет точно, как вызвать script.

К сожалению, большинство поисковых запросов Google для этого решения вызывают window.close, что фактически противоположно тому, что мне нужно!

4b9b3361

Ответ 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