以下の内容はhttps://let.blog.jp/tag/unloadより取得しました。


unload イベントが将来的に削除予定らしい
https://chromestatus.com/feature/5579556305502208

Chrome 117 で Developer trial として unload イベントを削除するための取り組みが始まるようです
まずは unload イベントリスナを追加するための Permission-Policy を追加するみたいです
最初はデフォルトで許可されていて 徐々にデフォルトで拒否に移行していくそうです
そして最終的に unload イベントのサポートを削除するのが目的だそうです

理由は現状でちゃんと動いてなくて信頼性が低いかららしいです
ブラウザによっては動かないものもあり 環境次第となっていて実質標準とは言えない状態みたいですね

特に BFCache との相性が悪いです
BFCache が有効だとページ遷移でページが表示されなくなっても復元される可能性があるので unload されたとは言えないです
それでページ遷移のときに unload を呼び出さなければ そのままそのページに戻って来ないと永遠に unload されないです
なので Chrome は unload リスナがついていたら BFCache は無効になるような挙動だったはずです

Safari は以前からずっと unload イベントが起きないです
以前これで困ったことがあります
でも Chrome だけでも動いてほしいことがあったので 削除されるのはやっぱり困りそうです

代替候補はやっぱり pagehide でしょうか
beforeunload もありますが ユーザーによるキャンセルが可能なので キャンセルされるかもしれないです
pagehide はタブを閉じたり リロードしたり 進む戻るで移動をしたり 新規にナビゲーションしたりでページが見えなくなったときに起きるイベントです
BFCache などで復元されるされない関係なしです
タブの切り替えや ウィンドウの最小化で見えなくなる場合はイベントが起きないです
基本はこれで良さそうですが unload ではないので JavaScript の状態がそのままで復元される可能性があるというのは気をつけないといけないです
あとは pagehide の理由としてリロードとかタブを閉じるとか戻るとかが受け取れればいいのですけどね

const win = window.open(location.href)
win.addEventListener("load", () => console.log("event load"))
win.addEventListener("unload", () => console.log("event unload"))
win.addEventListener("pageshow", () => console.log("event pageshow"))
win.addEventListener("pagehide", () => console.log("event pagehide"))
event pagehide
event unload
event load
event pageshow
(開いたタブを閉じる)
event pagehide
event unload
タブを閉じたことを検出するには load イベント時に unload リスナをつける
window.open でタブを開いて そのタブが閉じたら続きの処理をするとき 閉じたことを検出したい
window.onclose というプロパティがあるけど これは window が閉じられたらではなくて dialog が閉じたら発生するイベントらしい(ややこしいな
window が閉じられたことを検出するには unload イベント
beforeunload もあるけど外部からのリスナ設定だとこっちは呼び出されないみたい

const w = window.open(url)
w.addEventListener("load", () => console.log("load"))
w.addEventListener("unload", () => console.log("unload"))

これを試してみると

unload
load
(タブを閉じる)
unload

開いた直後に unload イベントが起きてる
その後ロードが終わったら load イベント
タブが閉じた後にもう一度 unload イベント

読み込み開始時に unload が起きるらしいけどこれはいらない情報
この unload は確実にどのブラウザでも起きるのか怪しそうな気がするし unload イベントのリスナは load イベントの中でつけるのが良さそう

const w = window.open(url)
w.addEventListener("load", () => {
w.addEventListener("unload", () => console.log("unload"))
})



以上の内容はhttps://let.blog.jp/tag/unloadより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14