前回からの続き

前回から引き続き、 manifest.json の項目の説明を行います。


host_permissions とは?

拡張機能が、アクセス可能なWebサイト範囲を定義します。

"host_permissions": [
  "https://example.com/*"
]

上記の例では、"https://example.com/*"のサイトの場合のみ、拡張機能の対象とします。

全サイトを対象としたい場合は、"<all_urls>"を指定します。

定義しない場合、ページへのスクリプト注入や、拡張機能からの通信などが失敗する場合があります。

👉 セキュリティの観点から、拡張機能の対象を広げすぎない方がよいです。


action とは?

ブラウザツールバー上の拡張アイコン、popup UI、タイトル

などを定義します。

"action": {
  "default_popup": "popup.html"
}

上記の例では、アイコンクリック時、自動で popup.html が開きます。

action を定義すると、ツールバーアイコンの動作をカスタマイズできます。

ただし:

  • background
  • content_scripts

などの動作に影響はありません。

この場合、

chrome.action.onClicked.addListener()

でクリックイベントを取得できます。

👉 popup は開くたびに生成され、閉じると破棄される為、状態保持には向かないです。


background とは?

ページとは独立して動作する、 バックグラウンド処理 を定義します。

"background": {
  "service_worker": "background.js"
}

content.js は、ページ内部でしか動きません。

しかし拡張機能には:

  • タブ監視
  • 通知
  • 状態共有
  • メッセージ中継

など、ページ外の処理も必要です。そのような処理を行う為のスクリプトを定義します。

👉 Manifest V3 では、この実行方法が、Manifest V2 から変更になり、 service_worker方式 になっています。

service_worker はWebページではなく、専用の実行環境で動作します。DOM操作や document、window へのアクセスはできません。又、必要時のみ起動し、常時常駐ではありません。


content_scripts とは?

Webページへ注入する JavaScript, CSS を定義します。

対象となる URL を開いた時、ブラウザが自動で、指定されたスクリプトをページに挿入します。

対象となる URL は、ワイルドカードを利用して指定できます。

"content_scripts": [
  {
    "matches": ["https://example.com/*"],
    "js": ["content.js"],
    "css": ["content.css"],
    "run_at": "document_idle"
  }
]

上記の例では、"https://example.com/*"に該当するサイトを開いた際、自動で、"content.js""content.css"がページに挿入されます。

run_at では、JavaScript実行タイミングを指定します。

タイミング
document_start HTML解析前
document_end DOM構築直後
document_idle ページ安定後

省略した場合、デフォルトの document_idle となります。


side_panel とは?

ブラウザ横へ表示する、 サイドパネルUI を定義します。

"side_panel": {
  "default_path": "sidepanel.html"
}

👉 popup と違い、開いたまま利用できるため、ファイルエクスプローラーや開発支援ツールとの相性が良いです。

※ popup はフォーカスが外れると自動的に閉じますが、side_panel はブラウザのサイドバーとして表示され続けます。


options_page とは?

拡張機能専用設定画面を定義します。

"options_page": "options.html"

👉 popup の様な簡易UI と違い、options_page は、本格設定画面で使用します。

例えば:

  • APIキー設定
  • 永続設定
  • 詳細オプション
  • テーマ変更

などに利用できます。

※ 拡張機能によっては options_page の代わりに options_ui が利用される場合があります。


permissions と host_permissions の違い

どちらも「権限」のように見えますが、役割は異なります。

permissions は 「どの API を使うか」 を定義します。

"permissions": [
  "tabs",
  "storage"
]

host_permissions は 「どのサイトを対象にするか」 を定義します。

"host_permissions": [
  "https://example.com/*"
]

つまり、

  • permissions → 機能の許可
  • host_permissions → アクセス先の許可

です。


まとめ

やりたいこと 必要な定義
popupを表示したい action.default_popup
Webページを書き換えたい content_scripts
ページ外で処理したい background
設定画面を作りたい options_page
サイドバーを表示したい side_panel
データ保存したい permissions.storage
現在のURLを取得したい permissions.tabs
任意ページへJSを注入したい permissions.scripting + host_permissions