探测浏览器类型javascript原生代码

//browser
J.$package(function(J){
    var s, browser,
        ua = navigator.userAgent.toLowerCase(),
        plug = navigator.plugins;

    /**
     * @ignore
     * @param String ver
     * @param Number floatLength
     * @return Number 
     */
    var toFixedVersion = function(ver, floatLength){
        ver= (""+ver).replace(/_/g,".");
        floatLength = floatLength || 1;
        ver = String(ver).split(".");//使用 String() 把对象的值转换为字符串
        ver = ver[0] + "." + (ver[1] || "0");
        ver = Number(ver).toFixed(floatLength);//toFixed() 方法可把 Number 四舍五入为指定小数位数的数字。
        return ver;
    };
    /**
     * browser 名字空间
     * 
     * @namespace
     * @name browser
     */
    browser = {
        /**
         * @namespace
         * @name features
         * @memberOf browser
         */
        features: 
        /**
         * @lends browser.features
         */    
        {
            /**
             * @property xpath
             */
            xpath: !!(document.evaluate),//evaluate() 方法计算一个 XPath 表达式。
            
            /**
             * @property air
             */
            air: !!(window.runtime),
            
            /**
             * @property query
             */
            query: !!(document.querySelector)
        },

        /**
         * @namespace
         * @name plugins
         * @memberOf browser
         */
        plugins: 
        /**
         * @lends browser.plugins
         */    
        {
            flash: (function(){
                //var ver = "none";
                var ver = 0;
                if (plug && plug.length) {
                    var flash = plug['Shockwave Flash'];
                    if (flash && flash.description) {
                        ver = toFixedVersion(flash.description.match(/\b(\d+)\.\d+\b/)[1], 1) || ver;
                    }
                } else {
                    var startVer = 13;
                    while (startVer--) {
                        try {
                            new ActiveXObject('ShockwaveFlash.ShockwaveFlash.' + startVer);
                            ver = toFixedVersion(startVer);
                            break;
                        } catch(e) {}
                    }
                }
                
                return ver;
            })()
        },
        
        /**
         * 获取浏览器的userAgent信息
         * 
         * @memberOf browser
         */
        getUserAgent: function(){
            return ua;
        },
        
        /**
         * 用户使用的浏览器的名称,如:chrome
         * 
         * 
         * @description {String} 用户使用的浏览器的名称,如:chrome
         * @type Number
         */
        name: "unknown",
        
        /**
         * @property version
         * @lends browser
         */
        version: 0,
        
        /**
         * 用户使用的浏览器的版本号,如果是0表示不是此浏览器
         * 
         * 
         * @description {Number} 用户使用的浏览器的版本号,如果是0表示不是此浏览器
         * @type Number
         */
        ie: 0,
        
        /**
         * 用户使用的浏览器的版本号,如果是0表示不是此浏览器
         * 
         * 
         * @description {Number} 用户使用的浏览器的版本号,如果是0表示不是此浏览器
         * @type Number
         */
        firefox: 0,
        
        /**
         * 用户使用的浏览器的版本号,如果是0表示不是此浏览器
         * 
         * 
         * @description {Number} 用户使用的浏览器的版本号,如果是0表示不是此浏览器
         * @type Number
         */
        chrome: 0,
        
        
        /**
         * 用户使用的浏览器的版本号,如果是0表示不是此浏览器
         * 
         * 
         * @description {Number} 用户使用的浏览器的版本号,如果是0表示不是此浏览器
         * @type Number
         */
        opera: 0,
        
        /**
         * 用户使用的浏览器的版本号,如果是0表示不是此浏览器
         * 
         * 
         * @description {Number} 用户使用的浏览器的版本号,如果是0表示不是此浏览器
         * @type Number
         */
        safari: 0,
        
        /**
         * 用户使用的浏览器的版本号,如果是0表示不是此浏览器
         * 
         * 
         * @description {Number} 用户使用的浏览器的版本号,如果是0表示不是此浏览器
         * @type Number
         */
        mobileSafari: 0,
        
        /**
         * 用户使用的是否是adobe 的air内嵌浏览器
         */
        adobeAir: 0,
        
        /**
         * 是否支持css3的borderimage
         * 
         * @description {boolean} 检测是否支持css3属性borderimage
         */
        //borderimage: false,
        
        /**
         * 设置浏览器类型和版本
         * 
         * @ignore
         * @private
         * @memberOf browser
         * 
         */
        set: function(name, ver){
            this.name = name;
            this.version = ver;
            this[name] = ver;
        }
    };
    
    // 探测浏览器并存入 browser 对象
    (s = ua.match(/msie ([\d.]+)/)) ? browser.set("ie",toFixedVersion(s[1])):
    (s = ua.match(/firefox\/([\d.]+)/)) ? browser.set("firefox",toFixedVersion(s[1])) :
    (s = ua.match(/chrome\/([\d.]+)/)) ? browser.set("chrome",toFixedVersion(s[1])) :
    (s = ua.match(/opera.([\d.]+)/)) ? browser.set("opera",toFixedVersion(s[1])) :
    (s = ua.match(/adobeair\/([\d.]+)/)) ? browser.set("adobeAir",toFixedVersion(s[1])) :
    (s = ua.match(/version\/([\d.]+).*safari/)) ? browser.set("safari",toFixedVersion(s[1])) : 0;

    J.browser = browser;
});

这段代码把浏览器的名字、版本信息绑定到了bower这个对象上。可以通过调用bower

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,973评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,767评论 18 399
  • 除了从小到大的学校教育和就职后的职称考试,自己没进行过系统学习。这类所谓系统学习因为教材、题库固定,时间受限形成一...
    cagerizhi阅读 501评论 0 1
  • e06669399d22阅读 202评论 0 0
  • 60岁人到中年,感悟颇多。 人到中年,唯心自醉,扬手是春,落手是秋,在这一扬一落之间,心中有种淡淡的酸楚:是被青春...
    妙文四月阅读 307评论 0 2