Есть ли способ определить, что окно браузера было закрыто? - PullRequest
3 голосов
/ 04 ноября 2008

Как можно определить, что была нажата кнопка закрытия браузера?

Ответы [ 8 ]

5 голосов
/ 04 ноября 2008

Из справочника событий JavaScript наиболее близким совпадением является событие OnUnload. Однако это также улавливает навигацию со страницы (и, таким образом, вы не хотите, чтобы функции выполнялись, если пользователь действительно нажимает на ссылку).

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

3 голосов
/ 04 ноября 2008

будет это:

$(window).unload( function () { alert("Bye now!"); } );

тебе помочь?

Хотя это в jQuery.

вам следует проверить ссылку, предоставленную Демоли , однако, она имеет дополнительную информацию об этом конкретном методе (и его недостатках).

редактировать: добавлена ​​ссылка.

2 голосов
/ 04 ноября 2008

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

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

1 голос
/ 04 ноября 2008

Это взлом, но, похоже, у меня работает. Это может быть также специфично для IE. Я кодирую только для среды IE.

<body onunload="if(self.screenTop>9000){unloadFunction();}">

Отредактировано, чтобы добавить, что моя функция unloadFunction открывает всплывающее окно, которое убивает сеанс пользователя. Вы не можете ничего сделать на странице, которая была закрыта сама. потому что он уже закрыт! ;)

1 голос
/ 04 ноября 2008

вы должны использовать onbeforeunload, а не onunload. IE 7 (и, возможно, другие браузеры) не на 100% надежны при запуске события unload, но, похоже, всегда запускает событие beforeunload.

например, window.onbeforeunload=function(){}

или, если вы используете prototype.js: Event.observe(window, 'beforeunload', function(){});

0 голосов
/ 04 ноября 2008

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

0 голосов
/ 04 ноября 2008

вы можете установить вызов ajax, который периодически опрашивает ваш сервер каждые несколько секунд или каждые несколько минут (в зависимости от вашей требуемой точности времени) и отслеживает время последнего попадания на стороне сервера. не совсем точно (например, проблемы с сетью могут вызвать ложное срабатывание), но может быть вариантом в зависимости от ваших требований.

0 голосов
/ 04 ноября 2008

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

Существует также свойство window.closed, которое устанавливается для объекта window после закрытия соответствующего окна. Обычно это используется, когда у вас есть ссылка на всплывающее окно.

Я не уверен, будет ли событие unload вызываться до или после установки свойства closed - вам придется поэкспериментировать.

Возможно, вы не можете отличить закрытое окно от браузера, который перешел на другой сайт.

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