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

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

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

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

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

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
});

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

window.onbeforeunload = function (e) {

}

Он запускается непосредственно перед выгрузкой страницы.

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

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

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

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

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

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

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

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

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