Chrome Extension の popup で beforeunload は起きない
◆ ブラウザアクションなどのポップアップでは beforeunload が起きない
◆ 代わりに unload を使えば動く
◆ unload はキャンセルできないだけで DOM にアクセスできるし ほとんどデメリットなし
◆ 代わりに unload を使えば動く
◆ unload はキャンセルできないだけで DOM にアクセスできるし ほとんどデメリットなし
ブラウザアクションのポップアップウィンドウで保存タイミングを beforeunload にしたら保存されていませんでした
調べてみると beforeunload はポップアップでは発生しないみたいです
代わりに unload イベントが使えるようです
と心配してましたがそういうことはなく問題なく保存できました
beforeunload と unload の違いは
キャンセルできない
ということのようです
もうアンロードしてしまってるのでキャンセルしてもとに戻すことは出来ません
保存処理をするとして 保存時にエラーならページから離れるのをキャンセルしたい場合は beforeunload にする必要があります
ただし 昔と違って今ではユーザに「ページを離れていいですか?」の固定メッセージを出せるだけで任意のメッセージも出せないですし 強制的にキャンセルはできません
beforeunload のキャンセルは 「編集中のデータが消えるけど大丈夫ですか?」 という意味のユーザの使い勝手向上目的のみで使うくらいに考えたほうがいいと思います
unload では alert などのダイアログ系の表示もできませんがこれは beforeunload でも一緒です
説明は
「Enables fast tab/window closing - runs a tab's onunload js handler independently of the GUI.」
というもので unload の JavaScript 処理を GUI とは独立して行うというものです
内部処理はわかりませんが別スレッド(プロセス)で行うとかでしょうか
なんにせよこれによってウィンドウを閉じるのが早くなるようです
もしかしてこれを ON にすると unload だと DOM の要素見えなくなったりするのかな と思いましたが実験的機能で JavaScript のできることが変わるのも変なので JavaScript 的には何も変わらない動きであってほしいです
どうなるのか気になったので 試してみると 特に変わりなく DOM の値を localStorage に保存することができました
デフォルト無効ですが有効にしておいたほうが良さそうなオプションです
調べてみると beforeunload はポップアップでは発生しないみたいです
代わりに unload イベントが使えるようです
unload
unload って名前の通りアンロード後に起きるイベントなので もう DOM は存在しないとかじゃないの?と心配してましたがそういうことはなく問題なく保存できました
beforeunload と unload の違いは
キャンセルできない
ということのようです
もうアンロードしてしまってるのでキャンセルしてもとに戻すことは出来ません
保存処理をするとして 保存時にエラーならページから離れるのをキャンセルしたい場合は beforeunload にする必要があります
ただし 昔と違って今ではユーザに「ページを離れていいですか?」の固定メッセージを出せるだけで任意のメッセージも出せないですし 強制的にキャンセルはできません
beforeunload のキャンセルは 「編集中のデータが消えるけど大丈夫ですか?」 という意味のユーザの使い勝手向上目的のみで使うくらいに考えたほうがいいと思います
unload では alert などのダイアログ系の表示もできませんがこれは beforeunload でも一緒です
Fast tab/window close
ちょっと話が変わりますが chrome://flags/ の設定に 「Fast tab/window close」 という項目があります説明は
「Enables fast tab/window closing - runs a tab's onunload js handler independently of the GUI.」
というもので unload の JavaScript 処理を GUI とは独立して行うというものです
内部処理はわかりませんが別スレッド(プロセス)で行うとかでしょうか
なんにせよこれによってウィンドウを閉じるのが早くなるようです
もしかしてこれを ON にすると unload だと DOM の要素見えなくなったりするのかな と思いましたが実験的機能で JavaScript のできることが変わるのも変なので JavaScript 的には何も変わらない動きであってほしいです
どうなるのか気になったので 試してみると 特に変わりなく DOM の値を localStorage に保存することができました
デフォルト無効ですが有効にしておいたほうが良さそうなオプションです