原生js判断浏览器与平台

在摸索WEB网页扫描二维码和条形码过程,因为方法基本各大浏览器都不怎么兼容,只能通过判断各个浏览器然后找解决方法,所以亲自实验了一些原生判断浏览器和平台的方法.如有错误,请指正。废话不多说,开始贴代码!


try{

    var validate = function(agent) {
        return navigator.userAgent.indexOf(agent) > -1;
    }
    var validPlatform = function(platformStr) {
        return navigator.platform.toUpperCase().indexOf(platformStr) > -1;
    }


    iBrowser = {
        kernel :  {
                Trident : validate('Trident'),   // IE Kernel
                Presto : validate('Presto'),     // Opera Kernel
                WebKit : validate('AppleWebKit') ,// Apple、Chrome Kernel
                Gecko : validate('Gecko')        // Firefox Kernel
                        && navigator.userAgent.indexOf('KHTML') == -1 
        },
        platform : {
            // Whether the mobile terminal
            isMobile : !!navigator.userAgent.match(/AppleWebKit.*Mobile.*/)
                    || !!navigator.userAgent.match(/AppleWebKit/)
                    && !(validPlatform('WIN') || validPlatform('MAC') || validPlatform('LINUX')),
            // IOS terminal
            isIOS : !!navigator.userAgent
                    .match(/\(i[^;]+;( U;)? CPU.+Mac OS X/)
                    || validate('iPhone OS'),
            isAndroid : validate('Android') || validate('Linux'), // android终端
            isiPhone : validate('iPhone') && validPlatform('IPHONE'), // 是否为iPhone
            isiPad : validate('iPad'), // 是否iPad
            isPC : validPlatform('WIN') || validPlatform('MAC')
                    || validPlatform('LINUX')
        },

        browser : function() {
            var u = navigator.userAgent;
            return {
                isIE : (window.ActiveXObject && navigator.appName
                        .indexOf("Microsoft") > -1),
                isQQBrowser : validate('QQBrowser'),
                isUBrowser : validate('UBrowser') && validate('AppleWebKit'),
                isFirefox : validate('Gecko') && validate('Firefox'),
                isWeChat : validate('MicroMessenger'), // 是否微信 (2015-01-22新增);
                isWebApp : u.indexOf('Safari') == -1,  // 是否web应该程序,没有头部与底部
                isQQ : u.match(/\sQQ/i) == 'qq'        // 是否QQ
            };
        }(),

        language : navigator.browserLanguage || navigator.language
    }


    iBrowser.browser.isSafari = function() {
        var safariBrowser;
        try {
            safariBrowser = safari; //Safari浏览器特有对象.
        } catch (e) {
        } finally {
            return ( (safariBrowser ? true : false) && validate('Safari') && validate('AppleWebKit'))
                    || validate('iPhone') || validate('Mac');
        }
    }();

    iBrowser.browser.isChrome = function() {
        var chromeBrowser;
        try {

            chromeBrowser = chrome;//PS:该对象是Chrome"内核"特有对象.
        } catch (e) {
        } finally {
            return (chromeBrowser ? true : false) && validate('Chrome') && validate('AppleWebKit');
        }
    }();

    iBrowser.browser.isIE = function() {
        var ieBrowser;
        try {
            //ie内核特有对象. 但ie11之后好像会有问题所以这个条件不是必须的
            ieBrowser = window.ActiveXObject;
        } catch (e) {
        } finally {
            return  ((window.ActiveXObject ? true : false) || navigator.appName
                        .indexOf("Microsoft") > -1) && iBrowser.kernel.Trident;
        }
    }();


    var platform = iBrowser.platform;
    var browser = iBrowser.browser;

    var log = function(obj){
        var out =   'isMobile : '+ platform.isMobile + 
                  ', isIOS : '+ platform.isIOS + 
                  ', isAndroid : '+ platform.isAndroid + 
                  ', isiPhone : '+ platform.isiPhone + 
                  ', isiPad : '+ platform.isiPad +
                  ', isPC : ' + platform.isPC +
                  ', isSafari : ' + browser.isSafari + 
                  ', isIE : ' + browser.isIE + 
                  ', isQQBrowser : ' +  browser.isQQBrowser +
                  ', isUBrowser : ' + browser.isUBrowser + 
                  ', isChrome : ' + browser.isChrome + 
                  ', isFirefox : ' + browser.isFirefox + 
                  ', isQQ : ' + browser.isQQ + 
                  '\n' + navigator.userAgent + " Platform/" + navigator.platform ;
        if(obj === 'log'){
            console.log(out);
        } else {
            alert(out)
        }
    }

    if(platform.isPC){
        log('log');
    } else {
        log('alert')
    }


}catch (e) {
    iError.printErr(e);
}

如有充足时间,会不定期修改代码.可以保证自己也能随时用到该判断的方法。少了一些功夫。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值