您的位置:首页 > Web前端 > JavaScript

javascript 用户代理字符串检测技术-

2017-04-30 23:19 429 查看
电脑上用的浏览器是最新版的safari、Chrome、firefox、edge、opera浏览器。可以保证在大部分版本下可以测试通过
首先给出五个浏览器的userAgent



最近在看红书,userAgent主要差别在opera上,给出的window.opera在最近的新版浏览器中会返回undefined已经不能使用,这点请注意。(由于不清除是从哪一版开始不支持的,故仍将window.opera写出,保证兼容性)

给出代码,一目了然
/**
* Created by juncai on 2017/7/17.
* 用户代理字符串检测技术---五大引擎 IE GECKO WEBKIT KHTML OPERA
*/
var client = function () {
var engine={
//呈现引擎
ie:0,
gecko:0,
webkit:0,
khtml:0,
opera:0,
version:null //具体版本号
};
var browser ={
//浏览器
ie:0,
chrome:0,
opera:0,
konq:0,
safari:0,
firefox:0,
version:null
};
//识别平台
var system ={
win:false,
mac:false,
x11:false,
iphone:false,
ipod:false,
ipad:false,
ios:false,
andriod:false,
winMobile:false//没有考虑塞班系统
}
//检测呈现引擎,设备
var ua = navigator.userAgent;
if(window.opera){//这里兼容以前的opera浏览器
engine.version =browser.opera= window.opera.version();
opera =browser.opera= parseFloat(client.engine.version);
}
else if(/AppleWebKit\/(\S+)/.test(ua)){//检测AppleWebKit引擎,同时需要检测三款浏览器,safari,chrome,新版的opera
engine.version=RegExp["$1"];
engine.webkit = parseFloat(engine.version);
//检测chrome
if(/OPR\/(\S+)/.test(ua)){//检测opera
engine.version=RegExp["$1"];
engine.webkit = parseFloat(engine.version);
browser.version = RegExp["$1"];
browser.opera = parseFloat(browser.version);
alert(browser.opera);
} else if(/Chrome\/(\S+)/.test(ua)){
browser.version = RegExp["$1"];
browser.chrome = parseFloat(browser.version);
}else if(/Version\/(\S+)/.test(ua)){  //检测safari,没有进行大致版本号的确定
browser.version = RegExp["$1"];
browser.safari = parseFloat(browser.version);
}
}else if(/KHTML\/(\S+)/.test(ua) || /Konqueror\/([^;+])/.test(ua)){//由于Khtml中包含gecko,所以首先检测khtml
engine.version=browser.version=RegExp["$1"];
engine.khtml =browser.konq = parseFloat(engine.version);
}else if(/rv:([^\)]+)\) Gecko\/\d{8}/.test(ua)){//排除WebKit和KHTML就可以进行Gecko的检测
engine.version=RegExp["$1"];
engine.gecko = parseFloat(engine.version);
if (/Firefox\/(\S+)/.test(ua)){
browser.version=RegExp["$1"];
browser.firefox = parseFloat(engine.version);
}
}else if(/MSIE ([^;]+)/.test(ua)){//只能检测到IE10
engine.version=RegExp["$1"];
engine.ie = parseFloat(engine.version);
}else if(/rv:([^\)]+)\) like Gecko/.test(ua)){//对IE11的检测
engine.version=browser.version=RegExp["$1"];
engine.ie =browser.ie = parseFloat(engine.version);
}
var p=navigator.platform;//检测系统版本
system.win = p.indexOf("Win")==0;
system.mac = p.indexOf("Mac")==0;
system.x11 = (p.indexOf("X11")==0 || p.indexOf("Linux")==0);
system.iphone = p.indexOf("iPhone")>-1;
system.ipod = p.indexOf("iPod")>-1;
system.ipad = p.indexOf("iPad")>-1;
//检测windows操作系统
if(system.win){
if(/Win(?:dows )?([^do]{2})\s?(\d+.\d+)?/.test(ua)){
if(RegExp["$1"] == "NT"){
switch(RegExp["$2"]){
case "5.0":
system.win = "2000";
break;
case "5.1":
system.win = "XP";
break;
case "6.0":
system.win = "Vista";
break;
case "6.1":
system.win = "7";
break;
case "6.2":
system.win = "10";
break;
case "10.0":
system.win = "10";
break;
default:
system.win = "NT";
break;
}

}else if(RegExp["$1"] == "9x"){
system.win = "ME";
}else{
system.win = RegExp["$1"];
}
}
}
//检测windows phone
if(system.win == "CE"){
system.winMobile = system.win;
}else if(system.win == "Ph"){
if(/Windows Phone (\d+.\d+)/.test(ua)){
system.win = "Phone";
system.winMobile = parseFloat(RegExp.$1);
}
}
//检测ios版本--------这里参考javascript高级程序设计模式的写法
if(system.mac && ua.indexOf("Mobile") > -1){
if (/CPU (?:iPhone )?OS (\d+_\d+)/.test(ua)){//?:不保存括号里面的内容,?表示前面的内容匹配一次或者零次
system.ios = parseFloat(RegExp.$1.replace("_","."));
}else{//不能检测出来
system.ios = 9;
}
}
//检测Android
if(/Android (\d+\.\d+)/.test(ua)){
system.andriod = parseFloat(RegExp.$1);
}
return {
engine:engine,
browser:browser,
system:system
};
}();


其中关于手机方面和苹果方面的相关的测试没做,正确性有待商榷,但是,对五个浏览器所做的测试均符合要求。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  javascript