マニフェスト - ウェブでアクセス可能なリソース

ウェブからアクセス可能なリソースは、ウェブページや他の拡張機能からアクセスできる拡張機能内のファイルです。通常、拡張機能はこの機能を使用して、ウェブページに読み込む必要がある画像などのアセットを公開しますが、拡張機能のバンドルに含まれるアセットはすべてウェブでアクセス可能にできます。

デフォルトでは、リソースはウェブからアクセスできません。これは、悪意のあるウェブサイトがユーザーがインストールした拡張機能のフィンガープリントを取得したり、インストールされた拡張機能の脆弱性(XSS バグなど)を悪用したりすることを防ぐためです。拡張機能のリソースにアクセスできるのは、拡張機能のオリジンから読み込まれたページまたはスクリプトのみです。

マニフェストの宣言

web_accessible_resources マニフェスト プロパティを使用して、公開するリソースと公開先のオリジンを宣言します。このプロパティは、リソースのアクセスルールを宣言するオブジェクトの配列です。各オブジェクトは、拡張機能リソースの配列を、それらのリソースにアクセスできる URL または拡張機能 ID の配列にマッピングします。

{
  ...
  "web_accessible_resources": [
    {
      "resources": [ "test1.png", "test2.png" ],
      "matches": [ "https://web-accessible-resources-1.glitch.me/*" ]
    }, {
      "resources": [ "test3.png", "test4.png" ],
      "matches": [ "https://web-accessible-resources-2.glitch.me/*" ],
      "use_dynamic_url": true
    }
  ],
  ...
}

配列内の各オブジェクトには次の要素が含まれます。

"resources"
文字列の配列。各文字列には、拡張機能のルート ディレクトリから特定のリソースへの相対パスが含まれています。リソースには、ワイルドカード マッチング用のアスタリスク(*)を含めることができます。たとえば、"/images/*" は拡張機能の images/ ディレクトリ内のすべての要素を再帰的に公開し、"*.png" はすべての PNG ファイルを公開します。
"matches"
文字列の配列。各文字列には、このリソースセットにアクセスできるサイトを指定するマッチパターンが含まれています。オリジンのみが URL の照合に使用されます。オリジンにはサブドメイン マッチングも含まれます。Google Chrome で「無効な一致パターン」と表示されるパターンに「/*」以外のパスがある場合にエラーが発生します。
"extension_ids"
リソースにアクセスできる拡張機能の ID を含む文字列の配列。
"use_dynamic_url"
true の場合、動的 ID を介してのみリソースにアクセスできるようにします。動的 ID はセッションごとに生成されます。つまり、ブラウザの再起動や拡張機能の再読み込み時に再生成されます。

各要素には、"resources" 要素と "matches" 要素または "extension_ids" 要素のいずれかを含める必要があります。これにより、パターンに一致するウェブページまたは ID が一致する拡張機能に指定されたリソースを公開するマッピングが確立されます。"use_dynamic_url" 要素は省略可能です。

リソースは、URL chrome-extension://[PACKAGE ID]/[PATH] を使用してウェブページで利用できます。この URL は、runtime.getURL() メソッドで生成できます。リソースは適切な CORS ヘッダーで提供されるため、fetch() を介して使用できます。

ウェブオリジンから拡張機能リソースへのナビゲーションは、そのリソースが リストされているとします次のような特殊なケースに注意してください。

  • 拡張機能が webRequest API を使用して公開リソース リクエストをウェブからアクセスできないリソースにリダイレクトする場合、そのようなリクエストもブロックされます。
  • ウェブアクセスできないリソースがリダイレクト元によって所有されている場合でも、上記は当てはまります。 あります。
  • シークレット モードでは、"incognito" フィールドの値が "split" に設定されていない限り、ナビゲーションはブロックされます。

コンテンツ スクリプト自体を許可する必要はありません。

ウェブ アクセス可能なリソースの例では、この要素が動作する拡張機能での使用方法を示しています。