window.onunload не работает должным образом в браузере Chrome. Может кто-нибудь мне помочь? - PullRequest
31 голосов
/ 17 октября 2011

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

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

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

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

Ответы [ 7 ]

54 голосов
/ 17 февраля 2012

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

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

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

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

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

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

6 голосов
/ 11 сентября 2015

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

window.onbeforeunload = function () {
  myFunction();
};
5 голосов
/ 22 июня 2015

Ответ Армина так полезен, спасибо. # 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.

3 голосов
/ 28 марта 2012

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

Проверить следующие ссылки:

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

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

3 голосов
/ 16 ноября 2011

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

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

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

Спасибо, Nived

1 голос
/ 07 марта 2016

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

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);
1 голос
/ 04 марта 2013

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

Единственное потенциальное решение, которое я нашел до сих пор, это API видимости страницы Кажется, что требуется <!DOCTYPE html>.

...