как идентифицировать onbeforeunload было вызвано нажатием кнопки закрытия - PullRequest
4 голосов
/ 21 сентября 2010

Как определить, вызвана ли onbeforeunload нажатием кнопки закрытия или обновлением страницы, или вообще какое событие вызвало onbeforeunload?

вот фрагмент:

window.onbeforeunload = function( e ){
    if( !e ) e = window.event;

    // insert code to determine which is the source of the event
}

Пожалуйста, помогите мне.

Ответы [ 4 ]

5 голосов
/ 09 октября 2014

Обращаясь к различным статьям и делая несколько проб и ошибок, наконец разработал эту идею, которая прекрасно работает для меня именно так, как я хотел, чтобы это произошло.Логика была намного проще, а также реализована. Идея состояла в том, чтобы обнаружить событие unload, которое вызывается закрытием браузера.В этом случае мышь будет находиться вне окна, указывая на кнопку «Закрыть» («X»).

$(window).on('mouseover', (function () {
    window.onbeforeunload = null;
}));


$(window).on('mouseout', (function () {
    window.onbeforeunload = ConfirmLeave;
}));

function ConfirmLeave() {
    return "";
}

Функция ConfirmLeave выдаст всплывающее сообщение по умолчанию, в случае еслинеобходимо настроить сообщение, вернуть текст, который будет отображаться вместо пустой строки

Посмотрите, поможет ли это:)

2 голосов
/ 21 сентября 2010

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

0 голосов
/ 22 августа 2017

Я искал что-то похожее, но оказалось с пустыми руками.Поэтому я попытался сделать противоположность

. Мы можем идентифицировать все события, кроме событий браузера.См. Ниже (непроверенный) фрагмент.

var target = $( e.target );
if(!target.is("a, :button, :submit, :input, .btn, .bulkFormButton")){
//Your code for browser events)
}
   $("form").submit(function () {
             //Your code for browser events)
   });

Это сработало для меня, но есть некоторые события, которые не обрабатываются.Я в поисках тех.Если у кого-то есть идеи о них, пожалуйста, поделитесь.

0 голосов
/ 21 сентября 2010

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

window.onbeforeunload = function() {
   var e = window.event;
   alert(e.clientX + " / " + e.clientY);
}
...