我已经编写了Chrome扩展程序,我正在将其迁移到Firefox和Edge等其他浏览器。但是,与Chrome的API相比,Firefox上的WebExtensions API存在一些差异。
所以我必须检测是否应该使用回调式API(在Chrome中,以及在Edge中)或承诺式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是回调样式。
答案 0 :(得分:4)
截至目前,您可以依靠browser
和chrome
:
function getBrowser() {
if (typeof chrome !== "undefined") {
if (typeof browser !== "undefined") {
return "Firefox";
} else {
return "Chrome";
}
} else {
return "Edge";
}
}
一方面,每次要调用API时都要使用它,这将充满了样板;您可以填充其中一个(例如,使用webextension-polyfill
在Chrome中获取browser
)并仅使用一个。
另一方面,实现中存在实际差异(即使您获得相同的签名),因此您需要使用上述浏览器检测来分离某些逻辑。