使用chrome.tabs与browser.tabs进行浏览器兼容

hul*_*ist 10 javascript google-chrome-extension firefox-addon-webextensions

我正在将Chrome扩展程序移植到Firefox.

根据MDN,有一个browser.tabs API应该由ch​​rome支持.

但是browserChrome不是稳定的对象.同时chrome.tabs在Firefox中工作得很好.

它是安全的替代browserchrome阅读MDN文档时?写文档的原因是什么browser?是否有计划的变化?

Mak*_*yen 8

注意:在过去几天中,许多MDN JavaScript API页面已从使用更改chrome.*为使用browser.*和描述browser.*接口提供的promise .这些更改使得页面根本没有提到使用API chrome.*.这些变化正在由同一人与谁我已经从讨论的变化远在项目中取得browser.*chrome.*.我还不知道发生了什么事.我已经给他发了电子邮件,询问这些变化的原因.截至2016-11-02的编辑,现在预计他的回复还为时过早.


我没有参与API的工作.但是,我已经并且将对API文档进行一些更改,特别是针对WebExtensions chrome.*vs. browser.*(所有页面都更改为显示chrome.*为2016-09-22).我参与其中是因为我发现大多数WebExtensions API页面都显得browser.*令人困惑.我想知道chrome.*和之间的区别browser.*.一旦我发现,我想让其他人不那么困惑.

WebExtensions browser.*API返回一个承诺:

如果在调用API时省略提供回调函数,browser.*对象实现API的一个版本,该API返回一个promise.这样做的目的是,实际的功能上是相同的chrome.*browser.*.如果为browser.*API 提供回调函数,则其功能与chrome.*API 相同.

它是安全的替代browserchrome阅读MDN文档时?

是的,除非文档专门讨论承诺.两者之间的唯一区别是,browser.*如果在调用API时未提供回调函数,则方法将返回promise.

写文档的原因是什么browser

我不确定为什么这些文档最初是以browser.*如此突出的方式编写的.我要认为这是一个配置选择时产生的页面是被做,或者差的细节chrome.*,并browser.*在某些时候在实施WebExtensions API的早期改变.

是否存在技术上的原因,为什么chrome.*没有回调不能返回承诺?

到目前为止,我提出的唯一原因是,chrome.*在API中执行参数检查时,使用返回promises将无法检查是否存在强制回调函数.使用browser.*命名空间,API可以假定调用者正在使用返回的promise.因此,browser.*当在API调用中未提供强制回调函数时,可以返回promise而不是生成错误.然而,这个原因是我的猜测.

更改文档:

我同意API文档主要显示browser.*在语法部分和每个API页面的其他地方是令人困惑的(例如在示例中).我一直在讨论在过去3周内主要负责WebExtensions文档的人员在整个API文档中更改此内容.他同意应该改变它.

有计划进行改变.文档将至少在两个阶段发生变化.第一个是通过所有WebExtensions API页面并更改语法部分来说明chrome.*.语法部分末尾的注释表示"API也可以browser.*返回promise版本中使用 ".此外,browser.*整个页面的所有用法都将更改为chrome.*除了那些专门显示用作返回承诺的API的部分.

目前的期望是页面看起来很像alarm.clear()现在.我更改了该页面以显示我建议更改的内容,包括WebExtensions文档负责人的建议.在alarms.clear()语法部分目前是这样的:

使用新格式的alarms.clear()

最初(3个星期前,2016年8月25日),我已经从改变了API的页面alarms.clear()通过browserAction.enable()与内容从说移动的主要变化browser.*chrome.*时被禁用我对MDN更改访问,因为它们的自动垃圾邮件过滤.这导致讨论了更改将采用的格式.我暂停进行更改,希望一旦选择了Syntax框的中间格式,就可以一次完成初始更改.由于现实生活,双方的讨论花费的时间比我预期的要长.

看起来关于将使用的确切格式的讨论将扩展到包括dev-mdc邮件列表,因为语法框的"正确"格式在Mozilla文档中不清楚如何编写API方法页面.

但是,我相信我可以继续改变展示chrome.*而不是browser.*.这样做可能会导致必须再次编辑页面以获取最终决定为官方格式的格式.使得browser.*chrome.*之前敲定语法块格式可能会导致更多的工作大局的变化,但在格式变化的最终版本进行了讨论会减少混乱.虽然我必须逐页进行这些更改(有一个用于进行批量更改的API,但我没有访问权限),但我已经实现了一个脚本,可以进行大部分所需的更改.因此,这些最初的不应该花太长时间.

更新:
我已将所有WebExtensions JavaScript API页面更改为显示chrome.*而不是browser.*.您可能需要按Ctrl- F5在每个页面上查看更改.

进一步的更改,更清楚地提供以下文档browser.*:
在对语法块格式化进行完全更改之后,需要在稍后的时间进行其他更改,以便在每个API页面的基础上提供更多示例使用chrome.*和之间browser.*.这几乎肯定是一个长期项目.