我一直在寻找可以检测访问网站的用户使用的是火狐3还是火狐4的代码。我所找到的只是检测浏览器类型而不是版本的代码。
如何检测这样的浏览器版本?
我一直在寻找可以检测访问网站的用户使用的是火狐3还是火狐4的代码。我所找到的只是检测浏览器类型而不是版本的代码。
如何检测这样的浏览器版本?
当前回答
基于已接受的答案,这是检测“Microsoft Edge”的更新
navigator.sayswho= (function(){ var ua= navigator.userAgent; var tem; var M= ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || []; if(/trident/i.test(M[1])){ tem= /\brv[ :]+(\d+)/g.exec(ua) || []; return 'IE '+(tem[1] || ''); } if(M[1]=== 'Chrome'){ tem= ua.match(/\b(OPR|Edg)\/(\d+)/); if(tem!= null) return tem.slice(1).join(' ').replace('OPR', 'Opera'); } M= M[2]? [M[1], M[2]]: [navigator.appName, navigator.appVersion, '-?']; if((tem= ua.match(/version\/(\d+)/i))!= null) M.splice(1, 1, tem[1]); return M.join(' '); })(); console.log(navigator.sayswho);
其他回答
您可以看到浏览器显示的内容,并使用该信息记录或测试多个浏览器。
navigator.sayswho= (function(){ var ua= navigator.userAgent; var tem; var M= ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || []; if(/trident/i.test(M[1])){ tem= /\brv[ :]+(\d+)/g.exec(ua) || []; return 'IE '+(tem[1] || ''); } if(M[1]=== 'Chrome'){ tem= ua.match(/\b(OPR|Edge)\/(\d+)/); if(tem!= null) return tem.slice(1).join(' ').replace('OPR', 'Opera'); } M= M[2]? [M[1], M[2]]: [navigator.appName, navigator.appVersion, '-?']; if((tem= ua.match(/version\/(\d+)/i))!= null) M.splice(1, 1, tem[1]); return M.join(' '); })(); console.log(navigator.sayswho); // outputs: `Chrome 62`
这里有更好的兼容性@kennebec snippet; 将返回浏览器名称和版本(返回72而不是72.0.3626.96)。
在Safari, Chrome, Opera, Firefox, IE, Edge, UCBrowser上测试,也在移动设备上测试。
function browser() {
var userAgent = navigator.userAgent,
match = userAgent.match(/(opera|chrome|crios|safari|ucbrowser|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [],
result = {},
tem;
if (/trident/i.test(match[1])) {
tem = /\brv[ :]+(\d+)/g.exec(userAgent) || [];
result.name = "Internet Explorer";
} else if (match[1] === "Chrome") {
tem = userAgent.match(/\b(OPR|Edge)\/(\d+)/);
if (tem && tem[1]) {
result.name = tem[0].indexOf("Edge") === 0 ? "Edge" : "Opera";
}
}
if (!result.name) {
tem = userAgent.match(/version\/(\d+)/i); // iOS support
result.name = match[0].replace(/\/.*/, "");
if (result.name.indexOf("MSIE") === 0) {
result.name = "Internet Explorer";
}
if (userAgent.match("CriOS")) {
result.name = "Chrome";
}
}
if (tem && tem.length) {
match[match.length - 1] = tem[tem.length - 1];
}
result.version = Number(match[match.length - 1]);
return result;
}
我正在为自己寻找一个解决方案,因为jQuery 1.9.1及以上已经删除了$。浏览器的功能。我想出了这个小函数。 它确实需要一个全局变量(我称之为mine _browser)来检查它是哪个浏览器。我已经写了一个jsfiddle来说明如何使用它,当然,它可以通过为_browser添加一个测试来扩展到其他浏览器。Foo,其中Foo是浏览器的名称。我只做了流行的。
detectBrowser ()
_browser = {}; function detectBrowser() { var uagent = navigator.userAgent.toLowerCase(), match = ''; _browser.chrome = /webkit/.test(uagent) && /chrome/.test(uagent) && !/edge/.test(uagent); _browser.firefox = /mozilla/.test(uagent) && /firefox/.test(uagent); _browser.msie = /msie/.test(uagent) || /trident/.test(uagent) || /edge/.test(uagent); _browser.safari = /safari/.test(uagent) && /applewebkit/.test(uagent) && !/chrome/.test(uagent); _browser.opr = /mozilla/.test(uagent) && /applewebkit/.test(uagent) && /chrome/.test(uagent) && /safari/.test(uagent) && /opr/.test(uagent); _browser.version = ''; for (x in _browser) { if (_browser[x]) { match = uagent.match( new RegExp("(" + (x === "msie" ? "msie|edge" : x) + ")( |\/)([0-9]+)") ); if (match) { _browser.version = match[3]; } else { match = uagent.match(new RegExp("rv:([0-9]+)")); _browser.version = match ? match[1] : ""; } break; } } _browser.opera = _browser.opr; delete _browser.opr; } detectBrowser(); console.log(_browser)
检查当前浏览器是否是Opera
if (_browser.opera) { // Opera specific code }
编辑修复了格式,修复了对IE11和Opera/Chrome的检测,从结果更改为browserResult。现在_browser键的顺序不重要了。更新了jsFiddle链接。
2015/08/11编辑为Internet Explorer 12 (EDGE)添加了新的测试用例,修复了一个小的regexp问题。更新了jsFiddle链接。
更新的代码,以检测浏览器从iOS。
navigator.sayswho= (function(){
var ua= navigator.userAgent;
var tem;
var M= ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
if(/trident/i.test(M[1])){
tem= /\brv[ :]+(\d+)/g.exec(ua) || [];
return 'IE '+(tem[1] || '');
}
if(M[1]=== 'Chrome'){
tem= ua.match(/\b(OPR)\/(\d+)/);
if(tem!= null) return 'Opera '+ tem.slice(1)[1];
tem= ua.match(/\b(Edg[a-zA-Z]{0,3})\/(\d+)/);
if(tem!= null) return 'Edge '+ tem.slice(1)[1];
} else if(M[1]=== 'Safari') {
tem= ua.match(/\b(EdgiOS)\/(\d+)/);
if(tem!= null) return 'Edge '+ tem.slice(1)[1];
tem= ua.match(/\b(FxiOS)\/(\d+)/);
if(tem!= null) return 'Firefox '+ tem.slice(1)[1];
tem= ua.match(/\b(CriOS)\/(\d+)/);
if(tem!= null) return 'Chrome '+ tem.slice(1)[1];
}
M= M[2]? [M[1], M[2]]: [navigator.appName, navigator.appVersion, '-?'];
if((tem= ua.match(/version\/(\d+)/i))!= null) M.splice(1, 1, tem[1]);
return M.join(' ');
}) ();
加上我自己对赫尔曼答案的实现。我需要操作系统检测,所以它被添加。还包括一些ES6代码(因为我们有一个转译器),你可能需要es5化。
detectClient() {
let nav = navigator.appVersion,
os = 'unknown',
client = (() => {
let agent = navigator.userAgent,
engine = agent.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [],
build;
if(/trident/i.test(engine[1])){
build = /\brv[ :]+(\d+)/g.exec(agent) || [];
return {browser:'IE', version:(build[1] || '')};
}
if(engine[1] === 'Chrome'){
build = agent.match(/\bOPR\/(\d+)/);
if(build !== null) {
return {browser: 'Opera', version: build[1]};
}
}
engine = engine[2] ? [engine[1], engine[2]] : [navigator.appName, nav, '-?'];
if((build = agent.match(/version\/(\d+)/i)) !== null) {
engine.splice(1, 1, build[1]);
}
return {
browser: engine[0],
version: engine[1]
};
})();
switch (true) {
case nav.indexOf('Win') > -1:
os = 'Windows';
break;
case nav.indexOf('Mac') > -1:
os = 'MacOS';
break;
case nav.indexOf('X11') > -1:
os = 'UNIX';
break;
case nav.indexOf('Linux') > -1:
os = 'Linux';
break;
}
client.os = os;
return client;
}
返回:对象{浏览器:"Chrome",版本:"50",操作系统:"UNIX"}