Window: unload イベント

警告: 開発者はこのイベントを使用するのを避けてください。下記の「使用上のメモ」を参照してください。

unload イベントは、文書または子リソースがアンロードされるときに発生します。

以下のイベントの後に発生します。

文書は以下のような状態にあります。

  • すべてのリソースがまだ存在する(img、iframe など)
  • エンドユーザーから見えるものは何もない
  • UI 操作の効果がない(window.open, alert, confirm, など)
  • エラーが発生しても、アンロードの処理の流れは停止しない

unload イベントは文書ツリーにも続くことに注意してください。親フレームのアンロードは、子フレームの unloadに行われます(以下の例を参照)。

構文

このイベント名を addEventListener() 等のメソッドで使用するか、イベントハンドラープロパティを設定するかしてください。

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

イベント型

一般的な Event です。

イベントハンドラーの別名

Window インターフェイスに加えて、イベントハンドラープロパティ onunload は以下のターゲットでも利用できます。

使用上のメモ

開発者はこのイベントを使用しないでください。

特にモバイルでは unload イベントが確実には発行されません。例えば、次の例では unload イベントはまったく発生しません。

  1. モバイルユーザーがページにアクセスします。
  2. その後、ユーザーが異なるアプリに切り替えます。
  3. その後、ユーザーがアプリマネージャーからブラウザーを閉じます。

また、 unload イベントは前方/後方キャッシュ (bfcache) と互換性がありません。このイベントを使用している多くのページは、イベントが発生した後はページが存在し続けないことを想定しているからです。これに対抗するため、いくつかのブラウザー(Firefox など)は unload リスナーがある場合、ページを bfcache に配置しませんが、これはパフォーマンスにとって悪いことです。他にも、 Chrome のように、ユーザーが操作しても unload を発行しないものもあります。

ユーザーのセッションの終わりを指示するために使用するのに最適なイベントは visibilitychange イベントです。 visibilitychange に対応していないブラウザーでは、 pagehide イベントが次善の選択肢となります。

ページのアンロードイベントを検出する場合は、 pagehide イベントを待ち受けするのがベストです。

unload イベントに関連する問題についての詳しい情報は、ページライフサイクル API ガイドを参照してください。

html
<!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 の内容を以下に示します。

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() のメッセージに記述された順序でイベントが発生します。

仕様書

Specification
HTML
# event-unload
HTML
# handler-window-onunload

ブラウザーの互換性

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
unload event
Deprecated

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
Deprecated. Not for use in new websites.

関連情報