在 Chrome 或 Firefox 上检测浏览器扩展是否为 运行 的最佳实践?
The best practice to detect whether a browser extension is running on Chrome or Firefox?
我写了一个 Chrome 扩展,我正在将它迁移到其他浏览器,如 Firefox 和 Edge。但是,与 Chrome 的 API.
相比,Firefox 上的 WebExtensions API 有一些差异
所以我必须检测是否应该使用回调式 APIs(在 Chrome 中,以及在 Edge 中)还是 promise 式 APIs(在火狐)。
例如:
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.*
APIs 但其 API 是回调样式。
截至目前,您可以依赖 browser
和 chrome
:
(自从切换到基于 Chromium 的引擎后不再用于检测 Edge)
function getBrowser() {
if (typeof chrome !== "undefined") {
if (typeof browser !== "undefined") {
return "Firefox";
} else {
return "Chrome";
}
} else {
return "Edge";
}
}
一方面,每次调用 API 时都使用它会充满样板;您可以填充其中之一(例如,使用 webextension-polyfill
在 Chrome 中获取 browser
)并且只使用一个。
另一方面,在实现上存在真正的差异(即使您获得相同的签名),因此您将需要上述浏览器检测来分离一些逻辑。
我写了一个 Chrome 扩展,我正在将它迁移到其他浏览器,如 Firefox 和 Edge。但是,与 Chrome 的 API.
相比,Firefox 上的 WebExtensions API 有一些差异所以我必须检测是否应该使用回调式 APIs(在 Chrome 中,以及在 Edge 中)还是 promise 式 APIs(在火狐)。
例如:
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.*
APIs 但其 API 是回调样式。
截至目前,您可以依赖 browser
和 chrome
:
(自从切换到基于 Chromium 的引擎后不再用于检测 Edge)
function getBrowser() {
if (typeof chrome !== "undefined") {
if (typeof browser !== "undefined") {
return "Firefox";
} else {
return "Chrome";
}
} else {
return "Edge";
}
}
一方面,每次调用 API 时都使用它会充满样板;您可以填充其中之一(例如,使用 webextension-polyfill
在 Chrome 中获取 browser
)并且只使用一个。
另一方面,在实现上存在真正的差异(即使您获得相同的签名),因此您将需要上述浏览器检测来分离一些逻辑。