Лучший способ определить, когда пользователь покидает веб-страницу? - PullRequest
179 голосов
/ 29 сентября 2008

Как лучше всего определить, покидает ли пользователь веб-страницу?

Событие onunload JavaScript не работает каждый раз (запрос HTTP занимает больше времени, чем требуется для завершения работы браузера).

Создание одного из них, вероятно, будет заблокировано текущими браузерами.

Ответы [ 6 ]

208 голосов
/ 29 сентября 2008

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

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

14 голосов
/ 05 мая 2011

Mozilla Developer Network имеет хорошее описание и пример onbeforeunload .

Если вы хотите предупредить пользователя перед тем, как покинуть страницу, если ваша страница грязная (то есть, если пользователь ввел некоторые данные):

window.addEventListener('beforeunload', function(e) {
  var myPageIsDirty = ...; //you implement this logic...
  if(myPageIsDirty) {
    //following two lines will cause the browser to ask the user if they
    //want to leave. The text of this dialog is controlled by the browser.
    e.preventDefault(); //per the standard
    e.returnValue = ''; //required for Chrome
  }
  //else: user is allowed to leave without a warning dialog
});
10 голосов
/ 24 октября 2013

Для этого я использую:

window.onbeforeunload = function (e) {

}

Он запускается перед тем, как страница выгружается.

5 голосов
/ 15 июля 2017

Вот альтернативное решение - поскольку в большинстве браузеров элементы управления навигацией (панель навигации, вкладки и т. Д.) Расположены над областью содержимого страницы, вы можете обнаружить указатель мыши, покидающий страницу через вверх и отобразить диалоговое окно «, прежде чем покинуть ». Это абсолютно ненавязчиво и , оно позволяет вам взаимодействовать с пользователем до того, как они фактически выполнят действие по выходу.

$(document).bind("mouseleave", function(e) {
    if (e.pageY - $(window).scrollTop() <= 1) {    
        $('#BeforeYouLeaveDiv').show();
    }
});

Недостатком является то, что, конечно, это догадка , которую пользователь на самом деле намеревается покинуть, но в подавляющем большинстве случаев это правильно.

4 голосов
/ 10 апреля 2014

Я знаю, что на этот вопрос дан ответ, но в случае, если вы хотите, чтобы что-то срабатывало только при закрытии фактического БРАУЗЕРА, а не только при загрузке страницы, вы можете использовать этот код:

window.onbeforeunload = function (e) {
        if ((window.event.clientY < 0)) {
            //window.localStorage.clear();
            //alert("Y coords: " + window.event.clientY)
        }
};

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

3 голосов
/ 29 сентября 2008

Один (немного хакерский) способ сделать это - заменить и связать ссылки, ведущие с вашего сайта, вызовом AJAX на стороне сервера, указывая, что пользователь уходит, а затем использовать этот же блок javascript, чтобы перевести пользователя внешний сайт, который они запросили.

Конечно, это не будет работать, если пользователь просто закроет окно браузера или введет новый URL.

Чтобы обойти это, вам, возможно, понадобится использовать setTimeout () Javascript на странице, делая AJAX-вызов каждые несколько секунд (в зависимости от того, как быстро вы хотите узнать, ушел ли пользователь).

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