Вызовите JavaScript, когда пользователь закроет (всплывающее) окно - PullRequest
2 голосов
/ 26 августа 2009

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

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

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

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

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

Ответы [ 5 ]

5 голосов
/ 28 августа 2009

Следующий код работает в 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>

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

Смотрите мое демо здесь

1 голос
/ 26 августа 2009

вы можете проверить из родительского окна, существует ли дочернее окно (например, проверять каждые 100 мс или около того), и запустить скрипт, если нет ...

0 голосов
/ 26 августа 2009

Привет. Вы можете использовать следующую функцию для события onbeforeunload, вызванного window непосредственно перед window.close

.
window.onbeforeunload = function () {
   // stuff do do before the window is unloaded here.
}

дайте мне знать, если это не решит вашу проблему

0 голосов
/ 26 августа 2009

Не знаю, работает ли это на практике, но если проблема связана с переходом на внутренние страницы, почему бы не установить глобальную переменную какого-либо типа при каждом нажатии ссылки на странице и проверить наличие этой загрузки?

Что-то вроде (извините за jQuery, я очень ленивый):

INTERNAL_CLICKED = false;

$("a").click(function() {
    INTERNAL_CLICKED = true;
});

window.onunload = function() {
    if(!INTERNAL_CLICKED) {
        // perform window unload code
    }
}

Повторим, полностью непроверенный, но кто знает - это может просто сработать для вас. Хотя, я бы остерегался, это, вероятно, будет срабатывать и при обновлении.

0 голосов
/ 26 августа 2009

Посмотрите на свойство window.opener. За исключением IE он имеет довольно хорошую поддержку . Вы можете использовать его для вызова некоторых функций javascript в родительском окне до window.close() всплывающего окна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...