Сантош прав, это событие будет вызвано гораздо большим количеством действий, чем просто нажатие кнопки закрытия на вкладке / в браузере. Я создал небольшой хак для предотвращения запуска действия onbeforeunload, добавив следующую функцию в готовый документ.
$(function () {
window.onbeforeunload = OnBeforeUnload;
$(window).data('beforeunload', window.onbeforeunload);
$('body').delegate('a', 'hover', function (event) {
if (event.type === 'mouseenter' || event.type === "mouseover")
window.onbeforeunload = null;
else
window.onbeforeunload = $(window).data('beforeunload');
});
});
Кроме того, перед тем, как вызвать какое-либо из событий, упомянутых Сантошем, вам нужно запустить следующую строку:
window.onbeforeunload = null;
Если вы не хотите, чтобы событие было запущено.
И вот последний фрагмент кода:
function OnBeforeUnload(oEvent) {
// return a string to show the warning message (not every browser will use this string in the dialog)
// or run the code you need when the user closes your page
return "Are you sure you want to close this window?";
}