[英]Using chrome.tabs vs browser.tabs for browser compatibility
我正在将我的 Chrome 扩展程序移植到 Firefox。
根据 MDN,chrome 应该支持一个browser.tabs API。
但是browser
不是 Chrome 稳定版中的对象。 同时chrome.tabs
在 Firefox 中工作得很好。
阅读 MDN 文档时,用chrome
替换browser
是否安全? 文档写browser
的原因是什么? 有计划的改变吗?
注意:最近几天,许多 MDN JavaScript API 页面已从使用chrome.*
更改为使用browser.*
并描述了browser.*
接口提供的承诺。 这些更改使页面根本没有提及使用 API 作为chrome.*
。 这些更改是由项目中的同一个人进行的,我曾与他讨论过从browser.*
到chrome.*
的更改。 我还不知道发生了什么。 我已经给他发了电子邮件,询问这些变化的原因。 截至本次编辑,2016-11-02,现在期待他的回应还为时过早。
我不参与 API 的工作。 但是,我已经并且将要对 API 文档进行一些更改,特别是关于 WebExtensions chrome.*
与browser.*
(截至 2016 年 9 月 22 日,所有页面都已更改为显示chrome.*
)。 我参与其中是因为我也发现大多数 WebExtensions API 页面显示browser.*
令人困惑。 我想知道chrome.*
和browser.*
之间有什么区别。 一旦我发现,我想让其他人不那么困惑。
browser.*
API 返回一个 promise : browser.*
对象实现了一个API版本, 如果您在调用 API 时省略提供回调函数,该版本将返回一个承诺。 目的是使chrome.*
和browser.*
的实际功能相同。 如果您向browser.*
API 提供回调函数,则其功能与chrome.*
API 相同。
阅读 MDN 文档时,用
chrome
替换browser
是否安全?
是的,除非文档专门讨论承诺。 两者的唯一区别是,如果调用 API 时未提供回调函数,则browser.*
方法将返回一个 promise。
文档写
browser
的原因是什么?
我不确定为什么文档最初是用browser.*
编写的browser.*
如此突出。 我认为要么是在生成页面时做出的配置选择,要么是chrome.*
和browser.*
之间差异的细节在实现 WebExtensions API 的早期发生了变化。
chrome.*
没有回调不能返回承诺是否有技术原因?
到目前为止,我想出的唯一原因是使用chrome.*
返回承诺将使在 API 中执行参数检查时无法检查强制回调函数的存在。 使用browser.*
命名空间,API 可以假设调用者正在使用返回的承诺。 因此,当调用 API 时未提供强制回调函数时,使用browser.*
可以返回承诺而不是生成错误。 然而,这个原因是我的推测。
我同意 API 文档主要在语法部分和每个 API 页面的其他地方显示browser.*
令人困惑(例如在示例中)。 在过去的 3 周里,我一直在与主要负责 WebExtensions 文档的人讨论在整个 API 文档中更改这一点。 他同意应该改变它。
有计划进行更改。 文档将至少分两个阶段进行更改。 首先是浏览所有 WebExtensions API 页面并将语法部分更改为chrome.*
。 语法部分末尾的注释会说“API 也可作为browser.*
在返回 promise的版本中使用。” 此外,整个页面中所有对browser.*
都将更改为chrome.*
除了那些专门显示 API 被用作返回承诺的部分。
当前的期望是该页面看起来与现在的alarms.clear()非常相似。 我已经更改了该页面以显示我建议的更改内容,包括负责 WebExtensions 文档的人员的建议。 alarms.clear()
语法部分目前看起来像:
最初(3 周前, alarms.clear()
8 月 25 日),我将 API 页面从alarms.clear()
更改为browserAction.enable()
,主要更改是将内容从说browser.*
到chrome.*
当我的由于其自动垃圾邮件过滤,因此无法访问对 MDN 进行更改。 这导致了对更改将采用的格式的讨论。 我暂停了更改,希望一旦选择了语法框的中间格式,就可以一次性完成初始更改。 由于现实生活,双方的讨论时间比我预期的要长。
看起来关于将使用的确切格式的讨论将扩大到包括dev-mdc 邮件列表,因为语法框的“正确”格式在Mozilla 文档中不清楚如何编写 API 方法页面.
但是,我相信我可以继续更改显示chrome.*
而不是browser.*
。 这样做可能会导致必须再次编辑页面才能将格式设置为最终决定为官方格式的任何内容。 在最终确定语法块格式之前将browser.*
更改为chrome.*
可能会导致更多的整体工作,但在讨论格式更改的最终版本时会减少混淆。 虽然我必须逐页进行这些更改(有一个用于进行批量更改的 API,但我没有访问权限),但我已经实现了一个脚本,可以进行大部分所需的更改。 因此,这些初始的不应花费太长时间。
更新:
我已将所有 WebExtensions JavaScript API 页面更改为显示chrome.*
而不是browser.*
。 您可能需要在每个页面上按Ctrl - F5才能查看更改。
进一步的变化,更清楚地提供关于browser.*
文档browser.*
:
在对语法块格式进行全面更改后,希望稍后进行其他更改,以便在每个 API 页面的基础上提供更多示例,说明使用chrome.*
和browser.*
之间的差异browser.*
. 这几乎可以肯定是一个长期项目。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.