id:pokutuna
Web Developer

Chrome 拡張を Manifest v3 対応した

公式のガイドに従ってやればよい

Migrating to Manifest V3 - Chrome Developers

  • background pages が Service Worker に置き換えられた
  • chrome API の Promise 化
  • リモートのコードが実行できなくなる
  • browser_action と page_action の統合
  • executeScript の変更

あたりが大きい

cocopy の場合

blog.pokutuna.com

browser_action と page_action の統合

Action API unification - Migrating to Manifest V3 - Chrome Developers

上記のように manifest を修正し、chrome.browserAction などの呼び出しを chrome.action に置換すれば良い。

ハマったのはキーボードショートカットを定義する commands の方も undocumented に変更されていた点。_execute_browser_action などを _execute_action に置き換える必要がある。

web_accessible_resources の指定が変わった

Web-accesible resources - Migrating to Manifest V3 - Chrome Developers

外部から拡張の options.html にクエリパラメータを付けてリンクしたい。
matches 以下にリンク元の origin を書いておけばリンクが開けるようになる。でも任意の origin からリンクすることはできなくなっていそう。

  "web_accessible_resources": [{
    "resources": [
      "options.html"
    ],
    "matches": [
      "https://github.com/*"
    ]
  }]

その他

ユーザ入力を js として解釈するのがコア機能なので、Remotely hosted code - Migrating to Manifest V3 - Chrome Developers の変更で詰むかと思ったけど、以前より sandbox で eval するようにしていたので何もする必要なかった。

ページタイトルや HTML の取得は、動的にコードを変更する必要がないので素直に function にして chrome.scripting.executeScript(...) する。scripting の permission も要求する。