04.08.2010, 00:37
|
Интересующийся
|
|
Регистрация: 27.07.2009
Сообщений: 24
|
|
Кроссбраузерный onBeforeUnload
Уважаемые форумчане!
Может кто-нибудь знает, как можно выполнить функцию по закрытии страницы в любом браузере?
Как вариант можно обращаться через небольшие интервалы к функции до тех пор, пока страница не закроется, но на это нет ресурсов, т.к. функция делает запрос на сервер.
Необходимо подсчитать время, проведенное юзером на сайте. Интересно, как это делают системы подсчета статистики, типа ли.ру и аналитика.. может кто в курсе, поделитесь, пожалуйста, информацией.
Спасибо!
|
|
04.08.2010, 00:41
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
Сообщение от onejsquestion
|
Необходимо подсчитать время, проведенное юзером на сайте.
|
запишите в куку время, когда он зашел на страницу.
затем, раз в секунду в другую куку пишите текущее время.
при загрзке следующей страницы, будет передана информация о времени проведенном на текущей странице
|
|
04.08.2010, 00:48
|
Интересующийся
|
|
Регистрация: 27.07.2009
Сообщений: 24
|
|
Дело в том, что даже если и не будет загрузки следующей страницы, информацию о времени пребывания посетителя на текущей странице необходимо получить.
|
|
04.08.2010, 01:35
|
Профессор
|
|
Регистрация: 02.07.2010
Сообщений: 642
|
|
Сообщение от onejsquestion
|
... но на это нет ресурсов, т.к. функция делает запрос на сервер.
|
Что-то я не очень понял эту фразу. У кого нет ресурсов? На что?
Событие закрытия броузера Вы не отследите, потому что его нет. Также как и выключения интернета у пользователя и выключения им компьютера из розетки.
Но есть способ отслеживать активность пользователя и время его пребывания на сайте. С какой точностью это надо делать? Предположим с точностью 1 минута. Тогда на каждой странице должна быть функция, посылающая сигнал на сервер раз в минуту "я жив". Вот по последней метке можно определить, когда Клиент отключился.
|
|
04.08.2010, 11:25
|
Интересующийся
|
|
Регистрация: 27.07.2009
Сообщений: 24
|
|
Это, как вариант я оговорил в первом посте, но он достаточно ресурсоемкий в данной задаче будет, в том смысле, что нагрузка на сервер будет большая от таких частых запросов*количество сайтов*количество посетителей этих сайтов, тем более, что точность до секунды нужна (ну +/- несколько секунд). Понятно, что можно реализовать серверную часть красиво и с умом, но все же хочется знать, а вдруг есть более изящное решение, не требующее таких затрат.
Последний раз редактировалось onejsquestion, 04.08.2010 в 11:30.
|
|
04.08.2010, 13:29
|
Профессор
|
|
Регистрация: 02.07.2010
Сообщений: 642
|
|
Не знаю, что Вы называете "более изящным", т.к. у каждого свой вкус...
Решения есть разные. Возможная альтернатива - это WebSockets.
Новое веяние от Гугл. Почитать можно здесь: http://habrahabr.ru/blogs/webdev/41223/
|
|
04.08.2010, 14:48
|
Интересующийся
|
|
Регистрация: 27.07.2009
Сообщений: 24
|
|
То, что надо! Спасибо огромное!
|
|
10.08.2010, 13:07
|
Новичок на форуме
|
|
Регистрация: 05.08.2010
Сообщений: 7
|
|
Сообщение от Маэстро
|
его нет. Также как и выключения интернета у пользователя
|
Прошу разрешить маленькое дополнение - появились два новых события offline и online (для FF проверял - работает правдо с не существенной задержкой)
|
|
10.08.2010, 19:34
|
|
Пионэр
|
|
Регистрация: 16.11.2009
Сообщений: 1,322
|
|
В Опере onbeforeunload, насколько я помню, срабатывает только при переходе по внутренней ссылке.
Вебсокетов, емнимс, в ней тоже нет.
Если уж настолько нужно отслеживать время пребывания пользователя, могу лишь посоветовать лонг-поллы.
Кстати, есть готовые сервисы типа веб-визора.
|
|
|
|