◆ ブラウザアクションなどのポップアップでは beforeunload が起きない
◆ 代わりに unload を使えば動く
◆ unload はキャンセルできないだけで DOM にアクセスできるし ほとんどデメリットなし

ブラウザアクションのポップアップウィンドウで保存タイミングを beforeunload にしたら保存されていませんでした
調べてみると 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 に保存することができました

デフォルト無効ですが有効にしておいたほうが良さそうなオプションです