API 实现之间的差异

浏览器扩展 API 是一个新兴标准。因此,虽然大多数主要浏览器(包括 Firefox、Chrome、Edge 和 Opera)都支持它,但各种实现之间存在差异。这意味着可能需要进行一些更改才能为多个浏览器实现您的扩展。

在支持扩展 API 的各种浏览器中,Firefox 最符合新兴标准,因此,在开发浏览器扩展时,它是您最佳的起点。

浏览器 API 实现之间的差异分为四个方面:命名空间、异步事件处理、API 覆盖范围和清单键。

命名空间

您可以使用命名空间引用所有扩展 API 函数。例如,browser.alarms.create({delayInMinutes}); 在 Firefox 中创建一个警报,该警报将在 delayInMinutes 中指定的时间后触发。

有两种 API 命名空间正在使用

  • chrome 用于 Chrome、Edge 和 Opera。
  • browser 用于 Firefox 和 Safari。

异步事件处理

JavaScript 提供了几种处理异步事件的方法。建议的扩展 API 标准是使用 Promise。在处理链式异步事件调用时,Promise 方法提供了显著的优势。

Firefox 和 Safari 为扩展 API 实施了 Promise。所有其他浏览器都使用回调。在清单 V3 中,Chrome、Edge 和 Opera 为大多数适当的方法提供了 Promise。(参见Chrome 错误 328932

如果您不熟悉 JavaScript 如何处理异步事件或 Promise,请查看了解异步 JavaScript:回调、Promise 和 Async/Await或 MDN使用 Promise页面。

API 覆盖范围

浏览器之间扩展 API 函数实现的差异大致分为三类

  • 缺乏对整个函数的支持。
  • 对函数内功能的支持存在差异。例如,在撰写本文时,Firefox 不支持notification函数方法onButtonClicked,而 Firefox 是唯一支持onShown的浏览器。
  • 支持浏览器特定功能的专有函数。例如,在撰写本文时,容器是 Firefox 特有的功能,由contextualIdentities函数支持。

清单键

支持的manifest.json在浏览器之间的差异大致分为两类

  • 扩展信息属性。例如,在撰写本文时,Firefox 和 Opera 包括developer键(除了author键),以记录有关扩展开发人员的详细信息。
  • 扩展功能。例如,在撰写本文时,只有 Firefox 支持protocol_handlers键(它注册基于 Web 的协议处理程序,即知道如何处理特定类型链接的应用程序)。

更多信息

您可以在以下内容中找到有关支持的浏览器扩展 API 功能差异的更多详细信息