实现清单属性

与函数和事件类似,实现新的清单键需要在模式中编写定义,并扩展 API 的 ExtensionAPI 实例。

WebExtension 的 manifest.json 内容使用名为 WebExtensionManifest 的类型进行验证,该类型在命名空间 manifest 中定义。添加新属性时的第一步是扩展模式,以便包含新属性的清单通过验证。这可以通过如下所示的 "$extend" 属性来完成

[
  "namespace": "manifest",
  "types": [
    {
      "$extend": "WebExtensionManifest",
      "properties": {
        "my_api_property": {
          "type": "string",
          "optional": true,
          ...
        }
      }
    }
  ]
]

下一步是通知 WebExtensions 框架,此 API 应实例化并在加载使用新清单键的扩展时收到通知。对于内置 API,这可以通过 API 清单中的 manifest 属性来完成(例如,ext-toolkit.json)。请注意,此属性是一个数组,因此扩展可以实现多个属性

"myapi": {
  "schema": "...",
  "url": "...",
  "manifest": ["my_api_property"]
}

最后一步是编写代码来处理新的清单条目。WebExtensions 框架在扩展启动时处理扩展的清单,这在现有扩展的新浏览器会话启动时发生,并且可以在会话过程中扩展首次安装或启用时发生,或者在扩展更新时发生。上面的 JSON 片段导致 WebExtensions 框架在启动扩展时遇到特定清单键时加载 API 实现,然后使用属性名称作为参数调用其 onManifestEntry() 方法。不会传递属性的值,但完整清单可通过 this.extension.manifest 获取

this.myapi = class extends ExtensionAPI {
  onManifestEntry(name) {
    let value = this.extension.manifest.my_api_property;
    /* do something with value... */
  }
}