【发布时间】:2018-02-09 15:08:38
【问题描述】:
我编写了一个 Chrome 扩展程序,并将其迁移到其他浏览器,如 Firefox 和 Edge。但是,Firefox 上的 WebExtensions API 与 Chrome 的 API 有一些不同。
所以我必须检测我应该使用回调风格的 API(在 Chrome 中,以及在 Edge 中)还是 Promise 风格的 API(在 Firefox 中)。
例如:
if(RUNNING_ON_CHROME)
chrome.permissions.request({
permissions: ...,
origins: ...,
}, function(result) { // callback-style
...
});
else // running on firefox
browser.permissions.request({
permissions: ...,
origins: ...,
}).then(function(result) { // promise-style
...
});
我想知道如何执行RUNNING_ON_CHROME 测试。是查看UserAgent中的相关字符串,还是查看browser!==undefined?
ps。 Edge 使用 browser.* API,但它的 API 是回调样式的。
【问题讨论】:
-
最佳实践可以因人而异。
-
你能做类似
browser = browser || chrome的事情吗? -
@freginold 不,因为它们有不同的签名。不过,Mozilla 维护了一个 polyfill。
-
@freginold 他们的 API 有一些不同。就像我的问题中的代码一样,Chrome 使用回调,而 Firefox 使用 Promise。 Mozilla 确实有一个 polyfill for it,但它对于我的扩展来说太重了。
-
@xmcp 定义“太重量级”。毕竟,您不是通过网络加载脚本,因此大小影响较小..
标签: javascript google-chrome firefox google-chrome-extension firefox-addon-webextensions