2008-11-04 3 views

ответ

2

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

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

3

бы это:

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

помочь?

В то же время в jQuery.

вы должны проверить the link given by Demoli, хотя он имеет дополнительную информацию об этом конкретном методе (и его недостатке).

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

5

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

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

0

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

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

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

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

0

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

1

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

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

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

0

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

1

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

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

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

+0

AFAICT это работает только в IE6. – 2009-10-05 05:05:29

Смежные вопросы