我说的是 Chrome 扩展、Firefox WebExtensions、Edge 扩展...
在后台脚本中,而不是内容脚本中,是否有一种“明确的方法”来知道我正在使用哪个浏览器?我需要针对不同的浏览器进行不同的操作。 是的,
navigator.userAgent
可能有用,但是
不是很清楚。 是否有任何扩展 API 可用于执行此操作?就像,
chrome.extension.browserType
。 (当然,这个并不存在..)
2 因此,对于某些事情,有必要能够确定代码当前正在运行的浏览器。 “如何检测 Safari、Chrome、IE、Firefox 和 Opera 浏览器?”
投票最高的答案中提供了一些很好的代码。然而,它需要一些修改才能在扩展环境中工作。铬
// Opera 8.0+ (tested on Opera 42.0)
var isOpera = (!!window.opr && !!opr.addons) || !!window.opera
|| navigator.userAgent.indexOf(' OPR/') >= 0;
// Firefox 1.0+ (tested on Firefox 45 - 53)
var isFirefox = typeof InstallTrigger !== 'undefined';
// Internet Explorer 6-11
// Untested on IE (of course). Here because it shows some logic for isEdge.
var isIE = /*@cc_on!@*/false || !!document.documentMode;
// Edge 20+ (tested on Edge 38.14393.0.0)
var isEdge = !isIE && !!window.StyleMedia;
// Chrome 1+ (tested on Chrome 55.0.2883.87)
// This does not work in an extension:
//var isChrome = !!window.chrome && !!window.chrome.webstore;
// The other browsers are trying to be more like Chrome, so picking
// capabilities which are in Chrome, but not in others is a moving
// target. Just default to Chrome if none of the others is detected.
var isChrome = !isOpera && !isFirefox && !isIE && !isEdge;
// Blink engine detection (tested on Chrome 55.0.2883.87 and Opera 42.0)
var isBlink = (isChrome || isOpera) && !!window.CSS;
/* The above code is based on code from: https://stackoverflow.com/a/9851769/3773011 */
//Verification:
var log = console.log;
if(isEdge) log = alert; //Edge console.log() does not work, but alert() does.
log('isChrome: ' + isChrome);
log('isEdge: ' + isEdge);
log('isFirefox: ' + isFirefox);
log('isIE: ' + isIE);
log('isOpera: ' + isOpera);
log('isBlink: ' + isBlink);
chrome.*
/browser.*
这是另一种技术。
browser.identity.getRedirectUrl
函数将返回一个后缀为:.extensions.allizom.org/
从 Firefox 运行时
.chromiumapp.org/
chrome
Web 扩展 Polyfill JS,如果您愿意,您也需要使用它调用 browser.identity.getRedirectUrl
这是最好的选择,但目前仅适用于 Firefox。
browser.runtime.getBrowserInfo()
即:
const BrowserCode = {
CHROME:1,
FF: 2,
};
// to submit to chrome
const CURRENT_BROWSER = BrowserCode.CHROME;
// or to submit to FF
const CURRENT_BROWSER = BrowserCode.FF;
// elsewhere
if (CURRENT_BROWSER === BrowserCode.CHROME) {
}
//or
const behavior = {
BrowserCode.CHROME: () => {},
BrowserCode.FIREFOX: () => {}
}
behavior[CURRENT_BROWSER]();
不幸的是,扩展程序
仍然没有这个API,这是一个耻辱,因为开发人员应该知道他们的扩展程序正在运行哪个浏览器,以便改变它的行为,或者至少是它的UI。
我解决这个问题的方法有点像 Mayken 的答案,但更简单。
const userAgent = navigator.userAgent;
let browser;
if (userAgent.includes("Edg")) {
browser = "Edge"
} else {
browser = "Chrome"
}
Edge 返回给我的字符串是 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0