💡

ポップアップ画面を使わない場合でも action は定義しなければならない

2023/11/16に公開

やりたかったことと発生した問題

ポップアップ画面は使わず、拡張機能のボタンを押すとオプションページに移動するような機能を作っていた。バックグラウンドスクリプトでaction.onClickedにイベントで新しくオプションページのタブを開く処理を書けば動くと思っていた。

bacgkround.js
chrome.action.onClicked.addListener(() => {
  chrome.tabs.create({ url: "/src/options/options.html" });
});

しかし下のようなエラーが出てアイコンをクリックしてもオプションページには移動せず、拡張機能を読み込むと次のようなエラーが出るだけだった

Uncaught TypeError: Cannot read properties of undefined (reading 'onClicked')

解決策

manifest.jsonに空のactionキーをつければ解決した。よくよく考えると、ポップアップ画面は使ってなくてもchrome.action.onClickedactionを使っているから、空でもいいからactionキーをmanifest.jsonで定義しなければならなかった。

manifest.json
{
  "manifest_version": 3,
  "name": "OptionTab",
  "version": "1.0.0",
  "permissions": ["tabs"],
  "background": { "service_worker": "src/background.js" },
+ "action": {}
}

Discussion