詩と創作・思索のひろば

ドキドキギュンギュンダイアリーです!!!

Fork me on GitHub

Chrome 拡張のポップアップが表示されるタイミングは onload っぽい

Chrome 拡張のポップアップがどのタイミングで表示されるのか、ちょっとググった限りでは分からなかったので調べた。 掲題の通りで、結論としてはまあそりゃそうだ、とはなるが、ポップアップ内で img や iframe により外部リソースを読み込んでるようなときは、すべてがロードし終わるまでユーザへの反応が何もなくなるので注意が必要そう。

ポイントになりそうなのは ExtensionPopup::DocumentOnLoadCompletedInPrimaryMainFrame で、これはコールバックとして呼ばれるっぽい。

// This method is invoked once the onload handler of the primary main frame's current document (i.e., |render_frame_host|) has completed. This happens when the primary main document has finished running onload events after loading all content (images, scripts, etc).

結果はシンプルだけど、ここに至るまでにいくらか読んで回った。Chromium のソースコードを読んだのは初めてだったけど、Chromium Code Search がよくできてて助かった。さすがにこれだけコードベースがでかいと、こういうツールも普通に必要になるわけだ。


検証用のリポジトリも一応作った。https://httpbin.org/delay/{delay} という遅れてレスポンスを返す便利エンドポイントがあるので、これを iframe で埋め込んでみている。await chrome.tabs.query や setTimeout を挟むと

GitHub - motemen/experiment-webext-popup-timing

20分でつくるChrome拡張 に刺激されて Chrome 拡張を爆速で作る方法を求めている。今回は Chrome だけじゃなくて webextension として対応したいなーと思って @samrum/vite-plugin-web-extension を使ってみたけど、Manifest Version 3 をターゲットにしたら結局 Firefox では見られなかった。Chrome による MV3 移行圧力とその他のブラウザのサポート具合がぜんぜん違って戸惑うな~。

はてなで一緒に働きませんか?