共有モジュール

共有モジュールは、他の拡張機能やアプリ間で共有できる権限のないリソースのコレクションです。共有モジュールの一般的な使用例は次のとおりです。

  • API として。HTML、JS、その他のソースを提供できる共有モジュールを配布して、それに依存する拡張機能とは独立して更新できる API を提供できます。これは、共有モジュールのコードで実行されるデータのペイロードが小さくなることが多いランタイムとゲームエンジンに有用です。
  • ダウンロードを最適化するため。共有モジュールには、多くの拡張機能で使用される共通リソースが含まれています。このダウンロードは、依存する拡張機能が初めてインストールされたときに 1 回だけ行われます。

マニフェスト

共有モジュールは、2 つのマニフェスト フィールド(エクスポートとインポート)を介して使用されます。

export フィールドは、拡張機能がリソースをエクスポートする共有モジュールであることを示します。

{
  "version": "1.0",
  "name": "My Shared Module",
  "export": {
    // Optional list of extension IDs explicitly allowed to
    // import this Shared Module's resources.  If no allowlist
    // is given, all extensions are allowed to import it.
    "allowlist": [
      "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
      "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
    ]
  }
  // Note: no permissions are allowed in Shared Modules
}

import フィールドは、拡張機能とアプリが特定の共有モジュールのリソースに依存することを宣言するために使用します。

{
  "version": "1.0",
  "name": "My Importing Extension",
  ...
  "import": [
    {"id": "cccccccccccccccccccccccccccccccc"},
    {"id": "dddddddddddddddddddddddddddddddd"
     "minimum_version": "0.5" // optional
    },
  ]
}

リソースへのアクセス

共有モジュール リソースにアクセスするには、インポート用拡張機能のルートにある予約済みパス _modules/SHARED_MODULE_ID を使用します。たとえば、ID が「cccccccccccccccccccccccccccccccccc」である共有モジュールのスクリプト「foo.js」を含めるには、拡張機能のルートから次のパスを使用します。

<script src="_modules/cccccccccccccccccccccccccccccccc/foo.js">

インポートする拡張機能の ID が「aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa」の場合、共有モジュール内のリソースの完全な URL は次のようになります。

chrome-extension://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/_modules/cccccccccccccccccccccccccccccccc/

共有モジュールのリソースはインポート拡張機能のオリジンにオーバーレイされるため、インポート拡張機能に付与されているすべての権限は共有モジュールのコードで使用できます。また、共有モジュールは、絶対パスを使用してインポート拡張機能のリソースにアクセスできます。

インストール / アンインストール

共有モジュールは、依存する拡張機能によって必要に応じて Chrome ウェブストアから自動的にインストールされ、それを参照した最後の拡張機能がアンインストールされると、自動的にアンインストールされます。共有モジュールを使用する拡張機能をアップロードするには、その共有モジュールが Chrome ウェブストアで公開されている必要があります。また、拡張機能が許可リストによって共有モジュールの使用を制限しないようにする必要があります。

開発中に、拡張機能が使用する共有モジュールを手動でインストールする必要があります。サイドローディングされた拡張機能や、パッケージ化されていない拡張機能として読み込まれた拡張機能については、自動インストールは行われません。ローカルにインストールされたパッケージ化されていない共有モジュールの場合は、key フィールドを使用して、共有モジュールが正しい ID を使用するようにする必要があります。