扩展生命周期管理

前面页面中描述的技术允许仅在使用该 API 的扩展被激活时加载和实例化 WebExtension API。但是,扩展生命周期中还有一些其他事件,API 可能需要响应。

扩展关闭

分配任何资源的 API(例如,向浏览器的用户界面添加元素,设置内部事件侦听器等)必须在为其分配资源的扩展关闭时释放这些资源。API 通过在 Extension 对象上使用 callOnClose() 方法来执行此操作。

扩展卸载和更新

除了在单个浏览器会话中分配的资源之外,某些 API 还会进行持久性更改,例如设置首选项或将数据存储在用户的配置文件中。这些更改通常不会在扩展关闭时恢复,而是在扩展完全卸载(或停止使用 API)时恢复。为了处理这种情况,可以在卸载或更新扩展时通知扩展。扩展更新是一个微妙的情况 - 考虑一个基于清单属性的存在进行某些持久性更改的 API。如果扩展在一个版本中使用清单键,然后更新到不再使用清单键的新版本,则 API 的 onManifestEntry() 方法将不再被调用,但 API 可以在更新后检查新清单以检测该键已被删除。

处理生命周期事件

要接收更新和卸载事件的通知,扩展会在 API 清单中列出这些事件

"myapi": {
  "schema": "...",
  "url": "...",
  "events": ["update", "uninstall"]
}

如果存在这些属性,则当使用该 API 的扩展被更新或卸载时,将为相关的 ExtensionAPI 实例调用 onUpdate()onUninstall() 方法。

请注意,这些事件可能会在非活动扩展上触发。因此,这些事件只能由内置于浏览器的扩展 API 处理。或者,换句话说,这些事件不能由在 WebExtension 实验中实现的 API 处理。如果 API 的实现依赖于这些事件以确保正确性,则该 API 必须内置于浏览器中,而不是通过实验提供。