2010-09-21 2 views
3

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

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

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

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

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

ответ

2

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

0

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

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

Не правда ли? Я не уверен, что все браузеры регистрируют положение мыши, когда оно покидает «холст». Также можно «щелкнуть» кнопку закрытия с помощью клавиатуры в большинстве операционных систем. – RoToRa

+0

@RoToRa: TO выбрал тег «internet-explorer», поэтому я предполагаю, что он ищет конкретное решение. И ваше право. Если для закрытия окна использовался ярлык или что-то еще, кроме мыши, никакого решения вообще не будет. – Andreas

4

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

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


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

function ConfirmLeave() { 
    return ""; 
} 

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

Смотрите, если это помогает, :)

+0

Лучший ответ на эту тему до сих пор –

+0

Это не на 100% надежный, но он работает довольно хорошо – user1623237

+0

Это лучший и единственный способ, насколько я нашел для этой проблемы, мы внедрили это решение и отлично работаем, спасибо. – Damitha

0

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

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

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

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

Смежные вопросы