Spec-Zone.ru › Web APIs

Окно: событие unload

Устаревшее: Эта функция больше не рекомендуется. Хотя некоторые браузеры могут её всё ещё поддерживать, она может быть удалена из соответствующих веб-стандартов, может быть в процессе удаления или поддерживаться только для совместимости. Избегайте её использования и обновляйте существующий код, если это возможно; см. таблицу совместимости внизу этой страницы, чтобы принять решение. Имейте в виду, что эта функция может перестать работать в любое время.

Предупреждение: Разработчики должны избегать использования этого события. См. "Примечания по использованию" ниже.

Событие unload срабатывает, когда документ или дочерний ресурс загружается.

Оно срабатывает после:

  • beforeunload (событие, которое можно отменить)
  • pagehide

Документ находится в следующем состоянии:

  • Все ресурсы по-прежнему существуют (img, iframe и т. д.)
  • Ничего больше не отображается пользователю
  • Взаимодействия с пользовательским интерфейсом неэффективны (window.open, alert, confirm и т. д.)
  • Ошибка не остановит процесс загрузки

Обратите внимание, что событие unload также следует структуре документа: загрузка родительского фрейма произойдёт перед загрузкой дочернего фрейма unload (см. пример ниже).

Синтаксис

Используйте имя события в методах, таких как addEventListener(), или задайте свойство обработчика событий.

addEventListener("unload", (event) => {});
onunload = (event) => {};

Тип события

Общее Event.

Псевдонимы обработчика событий

Помимо интерфейса Window, свойство обработчика событий onunload также доступно для следующих целей:

  • HTMLBodyElement
  • HTMLFrameSetElement
  • SVGSVGElement

Примечания по использованию

Разработчики должны избегать использования этого события.

Особенно на мобильных устройствах, событие unload не срабатывает надёжно. Например, событие unload вообще не срабатывает в следующем сценарии:

  1. Мобильный пользователь посещает вашу страницу.
  2. Затем пользователь переключается на другое приложение.
  3. Позже пользователь закрывает браузер из менеджера приложений.

Также событие 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API