共享模块

共享模块是可以在其他扩展程序和应用之间共享的无权限资源集合。共享模块的常见用途包括:

  • 作为 API。您可以分发一个共享模块,该模块可以提供 HTML、JS 和其他源代码,以便提供可独立于依赖该模块的扩展程序进行更新的 API。这对于运行时和游戏引擎非常有用,这些应用通常是在共享模块代码上运行的较小数据载荷。
  • 针对下载进行优化。共享模块包含很多扩展程序使用的通用资源。此扩展程序会下载一次,也就是首次安装某个依赖扩展程序时。

清单

共享模块通过两个清单字段使用: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 访问。例如,如需添加 ID 为“cccccccccccccccccccccccccccccc" 的共享模块中的脚本“foo.js”,请从扩展程序的根目录添加此路径:

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

如果导入扩展程序的 ID 为“aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa”,则指向共享模块中资源的完整网址为:

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

请注意,由于共享模块中的资源会叠加在导入扩展程序的来源中,因此授予导入扩展程序的所有权限都可用于共享模块中的代码。此外,共享模块能够通过使用绝对路径访问导入扩展程序中的资源。

安装 / 卸载

当相关扩展程序需要某个共享模块时,系统会自动从 Chrome 应用商店安装该模块,并在卸载最后一个引用该共享模块的扩展程序时,自动卸载该模块。要上传使用共享模块的扩展程序,该共享模块必须在 Chrome 应用商店中发布,而且不得通过许可名单来限制此扩展程序使用共享模块。

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