window.onunload не работает должным образом в браузере Chrome. Может кто-нибудь мне помочь?
Я написал этот код
function winUnload() {
alert("Unload Window");
MyMethod();
}
window.onunload = function() { winUnload(); }
Этот код отлично работает в IE и Firefox. Но этот код не работает в Chrome. Оба утверждения alert("Unload Window");
а также MyMethod();
не работают.
7 ответов
Есть некоторые действия, которые не работают в Chrome, внутри события unload. Ящики с предупреждением или подтверждением являются такими вещами.
Но что возможно (AFAIK):
- Открывать всплывающие окна (с помощью window.open) - но это будет работать, если блокировщик всплывающих окон отключен для вашего сайта
- Возвращает простую строку (в событии beforeunload), которая вызывает окно подтверждения, которое спрашивает пользователя, хочет ли он покинуть страницу.
Пример для № 2:
$(window).on('beforeunload', function() {
return 'Your own message goes here...';
});
Я знаю, что это старый, но я нашел способ заставить разгрузку работать с помощью 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);