Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Как отловить закрытие браузера?


Автор: Штык 10.10.2006, 22:33
собстно сабж.. все морочусь с чатом(AJAx юзаю) и вот собстно встал вопрос как отследить еси юзер не нажал кнопку выход а просто закрыл браузер?
прочел тут похожие темы но так и не нашел можно ли при отлове закрытия выполнить некий скрипт?
типа сказать серваку что все юзер ушел..

Автор: Aliance 10.10.2006, 23:29
onunload - но оно срабатывает даже если пользователь перешел на другую страницу.

Автор: sergejzr 11.10.2006, 11:19
Самый верный способ - переодически сообщать серверу, что юзер "живой". Например раз в 10 сек. аяксом запрос слать.

Автор: pythonwin 11.10.2006, 12:49
а может прописать в куках и + проверять onunload?

Автор: Штык 11.10.2006, 20:50
Цитата

Самый верный способ - переодически сообщать серверу, что юзер "живой". Например раз в 10 сек. аяксом запрос слать.


то есть каждые 10 сек шлю серву что пользователь жив и продлеваю жисть куки.. и время последнего обновления записываю так? а так же пробегаюсь по тем кто в сети и смарю еси время обновления больше заданного лимита то юзер мертв так?а этот вариант не оч грузить серв буит?

Цитата

а может прописать в куках и + проверять onunload? 

хмм тож хороший вариант..

так что оптимальнее буит?конечно попробую и то и то но хотелось бы мнение спецов узнать

Автор: sergejzr 12.10.2006, 12:44
Цитата(Штык @  11.10.2006,  19:50 Найти цитируемый пост)
то есть каждые 10 сек шлю серву что пользователь жив и продлеваю жисть куки.. и время последнего обновления записываю так? а так же пробегаюсь по тем кто в сети и смарю еси время обновления больше заданного лимита то юзер мертв так?а этот вариант не оч грузить серв буит?

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

Автор: GoodBoy 12.10.2006, 13:16
Цитата(sergejzr @  11.10.2006,  12:19 Найти цитируемый пост)
Самый верный способ - переодически сообщать серверу, что юзер "живой". Например раз в 10 сек. аяксом запрос слать. 

и при пропуске 3 запросов считать, что узер ушел!  я именно так и делал...

Автор: anka 2.11.2006, 13:40
<body onunload  = "document.location = 'test.php'">

Автор: R.M. 2.11.2006, 16:49
Ещё можно юзать onbeforeunload оно при переходе по вкладкам не срабатывает. Только он вроде в опере не работает

Автор: GoodBoy 3.11.2006, 12:07
anka, это будет срабатывать не только при закрытии браузера, но и при любом переходе со страницы на страницу!

Автор: Elfet 16.3.2009, 23:30
Можно ли как-нибудь очистить событие onunload - например как на Gmail что бы спрашивало, точно ли вы хотите уйти со страницы? 

Автор: EDELWEISS 24.3.2009, 20:42
http://www.citforum.ru/internet/javascript/jsevent.shtml

Автор: IDVsbruck 25.3.2009, 02:35
Как раз сейчас занимаюсь поиском и апробацией технологии Comet/Bayeux - для чатов самое оно. Так вот там даже есть реакция сервера, когда он не просто ERROR, но еще и DISCONNECT или SESSIONCLOSE (и еще парочка). Причем, отлавливает событие мгновенно и без участия кода на клиентской стороне.
В последнем релизе Jetty я видел клинтский и серверный код реализации чата (с использованием dojo или jquery). Также буквально сегодня видел реализацию чата на html-php с использованием этой технологии.

Автор: Elfet 25.3.2009, 10:27
IDVsbruck, что это за технология? Comet/Bayeux?

Автор: IDVsbruck 25.3.2009, 14:43
Comet - технология, так называемый server-pushing ... http://en.wikipedia.org/wiki/Comet_(programming)
Bayeux - протокол, сертифицированный создателями dojo. Он же Cometd. http://cometdproject.dojotoolkit.org/book/export/html/3 нашел полное описание протокола.
Еще можешь посмотреть технологию Continuations от Mortbay - так называемый server-polling. Возможно, для чатов это будет даже удобнее. Напоминает обычный опрос клиентом сервер ajax'ом, только ответ приходит с сервера не мгновенно, а как только на сервере появится событие (чей-то пост в твоем случае) или по таймауту, который выставляется. Само собой, свой пост также является событием. Сервер как бы задерживает response. Технология очень интересна тем, что на клиенте, в отличие от предыдущих технологий, не надо вообще ничего делать или добавлять - просто когда получаем ответ, тут же посылаем новый запрос. Реализации встречал кроме своей Java также на PHP, Perl и Python.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)