マニフェスト - サンドボックス

サンドボックス化された一意のオリジンで提供される拡張機能ページのコレクションを定義します。拡張機能のサンドボックス化されたページで使用されるコンテンツ セキュリティ ポリシーは、"content_security_policy" キーで指定します。

サンドボックス内では、次の 2 つの影響があります。

  1. サンドボックス化されたページは、拡張機能 API にはアクセスできません。また、サンドボックス化されていないページに直接アクセスすることはできません(サンドボックス化されたページは、postMessage() を使用して通信する可能性があります)。
  2. サンドボックス化されたページは、拡張機能の他の部分で使用されるコンテンツ セキュリティ ポリシー(CSP)の対象になりません(独自の CSP 値があります)。たとえば、インライン スクリプトと eval() を使用できます。

たとえば、カスタム CSP を使用するサンドボックスで 2 つの拡張機能ページを配信するよう指定する方法は次のとおりです。

{
  ...
  "content_security_policy": {
    "sandbox": "sandbox allow-scripts; script-src 'self' https://example.com"
  },
  "sandbox": {
    "pages": [
      "page1.html",
      "directory/page2.html"
    ]
  },
  ...
}

指定しない場合、"content_security_policy" のデフォルトの値は sandbox allow-scripts allow-forms allow-popups allow-modals; script-src 'self' 'unsafe-inline' 'unsafe-eval'; child-src 'self'; です。

CSP 値を指定してサンドボックスをさらに制限できますが、"sandbox" ディレクティブを含まなければならず、allow-same-origin トークンを含めてはなりません(可能なサンドボックス トークンについては、HTML5 仕様をご覧ください)。

リストする必要があるのは、ウィンドウまたはフレームでの読み込みが想定されるページのみです。サンドボックス化されたページで使用されるリソース(スタイルシートや JavaScript ソースファイルなど)は、それらを埋め込むフレームのサンドボックスを使用するため、pages リストに含める必要はありません。

「Chrome 拡張機能で eval() を使用する」では、サンドボックス ワークフローの実装方法について詳しく説明しています。このワークフローでは、拡張機能のデフォルトのコンテンツ セキュリティ ポリシーの下で実行に問題が生じる可能性があるライブラリを使用できます。