Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Отловить уход со страницы без учета обновления страницы (https://javascript.ru/forum/events/36315-otlovit-ukhod-so-stranicy-bez-ucheta-obnovleniya-stranicy.html)

IgorN 11.03.2013 18:44

Отловить уход со страницы без учета обновления страницы
 
Всем привет! У меня есть задача, видео звонка.
Сейчас пытаюсь решить вопрос с форс-мажорными ситуациями.
Например: человек, закрыл браузер, или перешол на другую страницу(клацнул на пункт меню, ввел другой урл и т.д.)
Может у него комп вырубился.
Т.е. обрабатываем все ситуации, кроме обновления страницы.
Как это сделать?
Мне надо уведомить сервер, что бы он принял ряд действий.
Погуглил эту тему. Нашел варианты
$( window.location ).bind(
                "change",
                function(){
                   alert('Test1');
                    return false;
                }
        );
        $(window).unload(function() {
            alert('Test2');
            return false;
        });
        window.onbeforeunload = function (event) {
            alert(event.target.URL);return false;}

Работает только последний. Вроде как то что нужно.
Но не позволяет решить вопрос с обновление страницы, так как объект event не содержит инфу о месте куда намылился пользователь.
Может я плохо смотрел, или не с того угла зашел...

Нужна помощь.
Всем спасибо!

I_nub 11.03.2013 19:03

<html>
<head>
<title>Дополнительное окно прощания</title>
<script language="JavaScript">
<!-- //
function bye()
{
alert("До свидания !");
}
// -->
</script>
</head>
<body onunload="bye()">
</body>
</html>


:-? Но ето только окно прощания

danik.js 11.03.2013 19:08

В хроме unload срабатывает, но алерт блокируется браузером.

IgorN 11.03.2013 19:10

Цитата:

Сообщение от I_nub (Сообщение 240062)
<html>
<head>
<title>Дополнительное окно прощания</title>
<script language="JavaScript">
<!-- //
function bye()
{
alert("До свидания !");
}
// -->
</script>
</head>
<body onunload="bye()">
</body>
</html>


:-? Но ето только окно прощания

У меня кстати не работает, это в FF and Chrome, уже пробовал.
Видимо по этому не пашет и $(window).unload
Пока работает только window.onbeforeunload
Посмотрел что нет уже событий у объект window.location, поэтому первый вариант и не канает.

IgorN 11.03.2013 19:12

Друг, подкинул идею
Цитата:

сделай таймер на секунду или две и суй в куки инфу с о сроком жизни +1 секунда, не обновился код - кука удалилась и следовательно ушел, а не перезагрузился
+ есть вариант общения между страницами по методу вконтакте плеера

С куками интересный вариант. По реализации плеера, не удалось пока найти инфу.

Deff 11.03.2013 19:28

IgorN,
Прописывайте при уходе текущий адрес в window.name и первым делом его считывайте - если пользователь лишь обновил страницу, то адреса совпадут

danik.js 12.03.2013 05:46

Цитата:

Сообщение от danik.js
Видимо по этому не пашет и $(window).unload

Кому что видимо, а что и невидимо) Мне например видимо по этому:
Цитата:

Сообщение от danik.js
В хроме unload срабатывает, но алерт блокируется браузером.

Цитата:

Сообщение от Deff
если пользователь лишь обновил страницу, то адреса совпадут

Прикольная тема. Знал ведь что есть способ отличить перезагрузку от чего-то другого. По идее еще может быть можно использовать sessionStorage, который будет очищаться при уходе со страницы.
Вот только в событиях unload, beforeundload никак ведь не определить - уходит юзер, или перезагружает страницу. Вобще, если речь идет о приложении, а не обычном вебсайте, то почему бы не сделать его одностраничным, на ajax? И одной проблемой меньше было бы.

I_nub 12.03.2013 16:55

Цитата:

Сообщение от IgorN
У меня кстати не работает, это в FF and Chrome, уже пробовал.

да ето правда


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