Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Кроссбраузерный onBeforeUnload (https://javascript.ru/forum/events/11044-krossbrauzernyjj-onbeforeunload.html)

onejsquestion 04.08.2010 00:37

Кроссбраузерный onBeforeUnload
 
Уважаемые форумчане!
Может кто-нибудь знает, как можно выполнить функцию по закрытии страницы в любом браузере?
Как вариант можно обращаться через небольшие интервалы к функции до тех пор, пока страница не закроется, но на это нет ресурсов, т.к. функция делает запрос на сервер.
Необходимо подсчитать время, проведенное юзером на сайте. Интересно, как это делают системы подсчета статистики, типа ли.ру и аналитика.. может кто в курсе, поделитесь, пожалуйста, информацией.
Спасибо!

Gvozd 04.08.2010 00:41

Цитата:

Сообщение от onejsquestion
Необходимо подсчитать время, проведенное юзером на сайте.

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

onejsquestion 04.08.2010 00:48

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

Маэстро 04.08.2010 01:35

Цитата:

Сообщение от onejsquestion (Сообщение 66192)
... но на это нет ресурсов, т.к. функция делает запрос на сервер.

Что-то я не очень понял эту фразу. У кого нет ресурсов? На что?
Событие закрытия броузера Вы не отследите, потому что его нет. Также как и выключения интернета у пользователя и выключения им компьютера из розетки. ;)
Но есть способ отслеживать активность пользователя и время его пребывания на сайте. С какой точностью это надо делать? Предположим с точностью 1 минута. Тогда на каждой странице должна быть функция, посылающая сигнал на сервер раз в минуту "я жив". Вот по последней метке можно определить, когда Клиент отключился.

onejsquestion 04.08.2010 11:25

Это, как вариант я оговорил в первом посте, но он достаточно ресурсоемкий в данной задаче будет, в том смысле, что нагрузка на сервер будет большая от таких частых запросов*количество сайтов*количество посетителей этих сайтов, тем более, что точность до секунды нужна (ну +/- несколько секунд). Понятно, что можно реализовать серверную часть красиво и с умом, но все же хочется знать, а вдруг есть более изящное решение, не требующее таких затрат.

Маэстро 04.08.2010 13:29

Не знаю, что Вы называете "более изящным", т.к. у каждого свой вкус... ;)
Решения есть разные. Возможная альтернатива - это WebSockets.
Новое веяние от Гугл. Почитать можно здесь: http://habrahabr.ru/blogs/webdev/41223/

onejsquestion 04.08.2010 14:48

То, что надо! Спасибо огромное!

MainBuh 10.08.2010 13:07

Цитата:

Сообщение от Маэстро
его нет. Также как и выключения интернета у пользователя

Прошу разрешить маленькое дополнение - появились два новых события offline и online (для FF проверял - работает правдо с не существенной задержкой)

subzey 10.08.2010 19:34

В Опере onbeforeunload, насколько я помню, срабатывает только при переходе по внутренней ссылке.

Вебсокетов, емнимс, в ней тоже нет.

Если уж настолько нужно отслеживать время пребывания пользователя, могу лишь посоветовать лонг-поллы.

Кстати, есть готовые сервисы типа веб-визора.


Часовой пояс GMT +3, время: 00:24.