window.onunload не работает должным образом в браузере Chrome. Может кто-нибудь мне помочь?

Я написал этот код

function winUnload() {
    alert("Unload Window");
    MyMethod();
}

window.onunload = function() { winUnload(); }

Этот код отлично работает в IE и Firefox. Но этот код не работает в Chrome. Оба утверждения alert("Unload Window"); а также MyMethod(); не работают.

7 ответов

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

Но что возможно (AFAIK):

  1. Открывать всплывающие окна (с помощью window.open) - но это будет работать, если блокировщик всплывающих окон отключен для вашего сайта
  2. Возвращает простую строку (в событии beforeunload), которая вызывает окно подтверждения, которое спрашивает пользователя, хочет ли он покинуть страницу.

Пример для № 2:

$(window).on('beforeunload', function() {
    return 'Your own message goes here...';
});

Демо: http://jsfiddle.net/PQz5k/

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

window.onbeforeunload = function () {
  myFunction();
};

Ответ Армина так полезен, спасибо. #2 - это то, что важнее всего знать при попытке настроить события выгрузки, которые работают в большинстве браузеров: вы не можете alert() или verify (), но при возврате строки генерируется модал подтверждения.

Но я обнаружил, что даже при возврате строки у меня возникали некоторые кросс-браузерные проблемы, специфичные для Mootools (в данном случае использовалась версия 1.4.5). Эта специфичная для Mootools реализация прекрасно работала в Firefox, но не вызвала всплывающее окно подтверждения в Chrome или Safari:

window.addEvent("beforeunload", function() {
    return "Are you sure you want to leave this page?";
});

Поэтому, чтобы мое событие onbeforeonload работало в разных браузерах, мне пришлось использовать собственный вызов JavaScript:

window.onbeforeunload = function() {
    return "Are you sure you want to leave this page?";
}

Не уверен, почему это так, или это было исправлено в более поздних версиях Mootools.

Вы можете попробовать использовать событие pagehide для Chrome and Safari,

Проверьте эти ссылки:

Как определить поддержку браузера для pageShow и pageHide?

http://www.webkit.org/blog/516/webkit-page-cache-ii-the-unload-event/

Пожалуйста, попробуйте вместо этого window.onbeforeunload для window.onunload для chrome. Вы также можете попробовать вызвать onbeforeunload из тега body>, который может работать в chrome.

Однако у нас есть проблема с функцией выгрузки в браузере Chrome. пожалуйста, проверьте

location.href не работает в chrome при вызове через событие выгрузки тела / окна

Спасибо нивед

Событие onunload не сработает, если событие onload не сработало. К сожалению, событие onload ожидает загрузки всего двоичного содержимого (например, изображений), и встроенные сценарии запускаются до возникновения события onload. DOMContentLoaded срабатывает, когда страница видна, до того, как это делает onload. И теперь это стандарт в HTML 5, и вы можете проверить поддержку браузера, но учтите, что это требует <!DOCTYPE html> (по крайней мере, в Chrome). Тем не менее, я не могу найти соответствующее событие для выгрузки DOM. И такое гипотетическое событие может не сработать, потому что некоторые браузеры могут держать DOM рядом для выполнения функции "восстановить вкладку".

Единственное потенциальное решение, которое я нашел до сих пор, - это API Page Visibility, для которого требуется <!DOCTYPE html>,

Это работает:

var unloadEvent = function (e) {
    var confirmationMessage = "Warning: Leaving this page will result in any unsaved data being lost. Are you sure you wish to continue?";
    (e || window.event).returnValue = confirmationMessage; //Gecko + IE
    return confirmationMessage; //Webkit, Safari, Chrome etc.
};
window.addEventListener("beforeunload", unloadEvent);
Другие вопросы по тегам