共享模块

共享模块是可在其他组织之间共享的资源的集合, 扩展程序和应用共享模块的常见用途包括:

  • 作为 API。您可以分发能够提供 HTML、JS 和其他源代码的共享模块, 提供可以独立于依赖于它的扩展程序进行更新的 API。可以是 对运行时和游戏引擎很有用,其中应用通常是在网页上运行的 共享模块的代码
  • 作为下载优化。共享模块包含许多扩展程序使用的通用资源。 它仅在首次安装依赖扩展程序时下载一次。

清单

通过两个 manifest 字段使用共享模块:export 和 import。

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 访问 。例如,要包含脚本“foo.js”从共享模块中选择 ID 为“cccccccccccccccccccccccccccccc”,请使用您的扩展程序根目录中的以下路径:

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

如果导入扩展程序的 ID 为“aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa”,则资源的完整网址 为:

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

请注意,由于共享模块中的资源会叠加到 扩展程序,授予导入扩展程序的所有权限都适用于“共享”中的代码 模块。此外,共享模块还能够使用 绝对路径。

安装 / 卸载

当相关依赖者需要时,系统会自动从 Chrome 应用商店安装共享模块。 扩展程序,并且会在卸载引用它的最后一个扩展程序时自动卸载。 要上传使用共享模块的扩展程序,必须在以下位置发布共享模块: Chrome 应用商店和扩展程序不得通过其 许可名单。

在开发过程中,您需要手动安装您的扩展程序使用的所有共享模块。 对于旁加载或解压出来的扩展程序,系统不会自动安装 。对于本地安装的未封装共享模块,您必须使用 key 字段 确保共享模块使用正确的 ID。