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

电脑上用的浏览器是最新版的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
    };
}();




其中关于手机方面和苹果方面的相关的测试没做,正确性有待商榷,但是,对五个浏览器所做的测试均符合要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值