javascript 用户代理字符串检测技术-
2017-04-30 23:19
429 查看
电脑上用的浏览器是最新版的safari、Chrome、firefox、edge、opera浏览器。可以保证在大部分版本下可以测试通过
首先给出五个浏览器的userAgent
![](https://img-blog.csdn.net/20170430232220843?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM1MDEwNzk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
最近在看红书,userAgent主要差别在opera上,给出的window.opera在最近的新版浏览器中会返回undefined已经不能使用,这点请注意。(由于不清除是从哪一版开始不支持的,故仍将window.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检测用户代理字符串
- 说说 JavaScript 对用户代理的检测技术(附完整源代码)
- 【javascript】浏览器用户代理检测脚本实现
- 完整的用户代理字符串检测脚本
- 用户代理字符串(navigator.userAgent)检测方法
- javascript——用户代理(环境)检测
- javascript用户代理检测
- javascript浏览器用户代理检测脚本实现方法
- 完整的用户代理字符串检测脚本
- 最近页面请求(request)时 用javascript等字符串出现客户端检测到有潜在危险的Request.Form 值
- javascript客户端检测技术
- 用户代理字符串简史
- 【JS】用户代理(环境)检测
- JavaScript 常见安全漏洞及自动化检测技术
- 用户代理检测
- IE 11 如何设置“用户代理字符串”
- [JavaScript]用脚本检测用户是否把网站加入信任站点
- 最近页面请求(request)时 用javascript等字符串出现客户端检测到有潜在危险的Request.Form 值
- 用户代理字符串简史
- Javascript检测字符串字节长度(for VS 正则)