Окно: событие unload
Устаревшее: Эта функция больше не рекомендуется. Хотя некоторые браузеры могут её всё ещё поддерживать, она может быть удалена из соответствующих веб-стандартов, может быть в процессе удаления или поддерживаться только для совместимости. Избегайте её использования и обновляйте существующий код, если это возможно; см. таблицу совместимости внизу этой страницы, чтобы принять решение. Имейте в виду, что эта функция может перестать работать в любое время.
Предупреждение: Разработчики должны избегать использования этого события. См. "Примечания по использованию" ниже.
Событие unload срабатывает, когда документ или дочерний ресурс загружается.
Оно срабатывает после:
-
beforeunload(событие, которое можно отменить) pagehide
Документ находится в следующем состоянии:
- Все ресурсы по-прежнему существуют (img, iframe и т. д.)
- Ничего больше не отображается пользователю
- Взаимодействия с пользовательским интерфейсом неэффективны (
window.open,alert,confirmи т. д.) - Ошибка не остановит процесс загрузки
Обратите внимание, что событие unload также следует структуре документа: загрузка родительского фрейма произойдёт перед загрузкой дочернего фрейма unload (см. пример ниже).
Синтаксис
Используйте имя события в методах, таких как addEventListener(), или задайте свойство обработчика событий.
addEventListener("unload", (event) => {});
onunload = (event) => {};
Тип события
Общее Event.
Псевдонимы обработчика событий
Помимо интерфейса Window, свойство обработчика событий onunload также доступно для следующих целей:
Примечания по использованию
Разработчики должны избегать использования этого события.
Особенно на мобильных устройствах, событие unload не срабатывает надёжно. Например, событие unload вообще не срабатывает в следующем сценарии:
- Мобильный пользователь посещает вашу страницу.
- Затем пользователь переключается на другое приложение.
- Позже пользователь закрывает браузер из менеджера приложений.
Также событие unload несовместимо с кэшем возврата/перехода (bfcache), так как многие страницы, использующие это событие, предполагают, что страница больше не будет существовать после срабатывания события. Чтобы противостоять этому, некоторые браузеры (например, Firefox) не помещают страницы в bfcache, если у них есть обработчики событий unload, что плохо сказывается на производительности. Другие, такие как Chrome, не будут запускать unload при переходе пользователя.
Лучшим событием для сигнализации о завершении сеанса пользователя является событие visibilitychange. В браузерах, не поддерживающих visibilitychange, следующим лучшим вариантом является событие pagehide, которое также не срабатывает надёжно, но совместимо с bfcache.
Если вы хотите специально обнаружить события загрузки страницы, лучше всего прослушивать событие pagehide.
См. руководство API жизненного цикла страницы для получения дополнительной информации о проблемах, связанных с событием unload.
Примеры
<!doctype html>
<html lang="en-US">
<head>
<meta charset="UTF-8" />
<title>Parent Frame</title>
<script>
window.addEventListener("beforeunload", (event) => {
console.log("I am the 1st one.");
});
window.addEventListener("unload", (event) => {
console.log("I am the 3rd one.");
});
</script>
</head>
<body>
<iframe src="child-frame.html"></iframe>
</body>
</html>
Ниже содержимое child-frame.html:
<!doctype html>
<html lang="en-US">
<head>
<meta charset="UTF-8" />
<title>Child Frame</title>
<script>
window.addEventListener("beforeunload", (event) => {
console.log("I am the 2nd one.");
});
window.addEventListener("unload", (event) => {
console.log("I am the 4th and last one…");
});
</script>
</head>
<body>
☻
</body>
</html>
При загрузке родительского фрейма события будут срабатывать в порядке, описанном в сообщениях console.log().
Спецификации
| Спецификация |
|---|
| HTML # event-unload |
| HTML # handler-window-onunload |
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
unload_event |
1 | 12 | 1 | 4 | 3 | 18 | 4 | 10.1 | 1 | 1.0 | 4.4 |
См. также
- Связанные события:
DOMContentLoaded,readystatechange,load - Загрузка документов — unload документа
- Событие
visibilitychange. -
Не теряйте состояние пользователя и приложения, используйте Page Visibility подробно объясняет, почему вы должны использовать
visibilitychange, а неbeforeunload/unload. - API жизненного цикла страницы предоставляет рекомендации по обработке поведения жизненного цикла страницы в ваших веб-приложениях.
- PageLifecycle.js: библиотека JavaScript, которая обрабатывает несоответствия между браузерами в поведении жизненного цикла страницы.
- Кэш возврата/перехода объясняет, что такое кэш возврата/перехода и его последствия для различных событий жизненного цикла страницы.
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/Window/unload_event