Window: unload イベント
警告: 開発者はこのイベントを使用するのを避けてください。下記の「使用上のメモ」を参照してください。
unload
イベントは、文書または子リソースがアンロードされるときに発生します。
以下のイベントの後に発生します。
beforeunload
(キャンセル可能なイベント)pagehide
文書は以下のような状態にあります。
- すべてのリソースがまだ存在する(img、iframe など)
- エンドユーザーから見えるものは何もない
- UI 操作の効果がない(
window.open
,alert
,confirm
, など) - エラーが発生しても、アンロードの処理の流れは停止しない
unload イベントは文書ツリーにも続くことに注意してください。親フレームのアンロードは、子フレームの unload
の前に行われます(以下の例を参照)。
構文
このイベント名を addEventListener()
等のメソッドで使用するか、イベントハンドラープロパティを設定するかしてください。
addEventListener("unload", (event) => {});
onunload = (event) => {};
イベント型
一般的な Event
です。
イベントハンドラーの別名
Window
インターフェイスに加えて、イベントハンドラープロパティ onunload
は以下のターゲットでも利用できます。
使用上のメモ
開発者はこのイベントを使用しないでください。
特にモバイルでは unload
イベントが確実には発行されません。例えば、次の例では unload
イベントはまったく発生しません。
- モバイルユーザーがページにアクセスします。
- その後、ユーザーが異なるアプリに切り替えます。
- その後、ユーザーがアプリマネージャーからブラウザーを閉じます。
また、 unload
イベントは前方/後方キャッシュ (bfcache) と互換性がありません。このイベントを使用している多くのページは、イベントが発生した後はページが存在し続けないことを想定しているからです。これに対抗するため、いくつかのブラウザー(Firefox など)は unload リスナーがある場合、ページを bfcache に配置しませんが、これはパフォーマンスにとって悪いことです。他にも、 Chrome のように、ユーザーが操作しても unload
を発行しないものもあります。
ユーザーのセッションの終わりを指示するために使用するのに最適なイベントは visibilitychange
イベントです。 visibilitychange
に対応していないブラウザーでは、 pagehide
イベントが次善の選択肢となります。
ページのアンロードイベントを検出する場合は、 pagehide
イベントを待ち受けするのがベストです。
unload
イベントに関連する問題についての詳しい情報は、ページライフサイクル API ガイドを参照してください。
例
<!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()
のメッセージに記述された順序でイベントが発生します。
仕様書
Specification |
---|
HTML Standard # event-unload |
HTML Standard # handler-window-onunload |
ブラウザーの互換性
BCD tables only load in the browser
関連情報
- 関連イベント:
DOMContentLoaded
,readystatechange
,load
- Unloading Documents — unload a document
visibilitychange
イベント- Don't lose user and app state, use Page Visibility は、
beforeunload
/unload
ではなく、visibilitychange
を使用する理由について詳しく説明しています。 - Page Lifecycle API は、ウェブアプリケーションでページのライフサイクル動作を処理するための最善の手法を提供します。
- PageLifecycle.js: ページのライフサイクル動作におけるブラウザー間の不整合に対処する JavaScript ライブラリーです。
- Back/forward cache は前方/後方キャッシュとは何か、そして様々なページライフサイクルイベントに対するその意味について説明しています。