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 功能差异的更多详细信息