首页 > JS高级程序设计学习遇到的的一个不是很明白的地方,求解?

JS高级程序设计学习遇到的的一个不是很明白的地方,求解?

看完了用户代理这章,自己把写代码写下来时有两个不明白的地方。
1、这个用户代理会设置一个浏览器的信息,在下面代码倒数第七行的代码是检测是否是firefox浏览器,如果是设置broswer的信息,如果不是,什么都没做。这样不是就没设置broswer的信息了吗?为什么不仿照opera和konq把引擎的信息写到broswer信息中呢?
2、最后在代码外还有

broswer.ie = engine.ie;
broswer.opera = engine.opera;

注释是说检测浏览器,不明白什么意思?浏览器不已经检测过了吗?

var client = (function () {

    //呈现引擎
    var engine = {
        
        ie : 0,
        gecko : 0,
        webkit : 0,
        khtml : 0,
        opera : 0,

        ver : null
    };

    //浏览器版本
    var broswer = {
        
        ie : 0,
        firefox : 0,
        chrome : 0,
        safari : 0,
        konq : 0,
        opera : 0,

        ver : null
    };

    //平台信息
    var system = {
        
        win : false,
        mac : false,
        x11 : false,

        //移动设备
        iphone : false,
        ipod : false,
        ipad : false,
        ios : false,
        andriod : false,
        nokia : false,
        winMobile : false,

        //游戏平台

        will : false,
        ps : false
    };


    //用户代理检测
    var ua = navigator.userAgent;
    //opera会将自己完全伪造成其他浏览器所以先检测它
    if (window.opera){
        engine.opera = broswer.opera = parseInt(engine.ver);
        engine.ver = broswer.ver = window.opera.version();
    }else if (/AppleWebKit\/(\S+)/.test(ua)){
    //webkit引擎的独有特征是AppleWebKit,利用正则表达式来获取版本号
        engine.ver = RegExp.$1;
        engine.webkit = parseInt(engine.ver);

        //确认引擎后可以判断浏览器版本,chrome or safari
        if (/chrome\/(\S+)/.test(ua)){
            broswer.ver = RegExp.$1;
            broswer.chrome = parseFloat(broswer.ver);
        }else if (/Version\/(\S+)/.test(ua)){
            broswer.ver = RegExp.$1;
            broswer.safari = parseFloat(broswer.ver);
        }else {
            var safariVersion = 1;

            //当判断不出来时,根据引擎版本号来判断浏览器版本
            if (engine.webkit < 100){
                safariVersion = 1;
            } else if (engine.webkit < 312){
                safariVersion = 1.2;
            } else if(engine.webkit < 412){
                safariVersion = 1.3;
            } else{
                safariVersion = 2;
            }

            broswer.ver = broswer.safari = safariVersion;
        }
    } else if (/KHTML\/(\S+)/.test(ua) || /Konqueror\/[^;]+/.test(ua)){
        engine.ver = broswer.ver = RegExp.$1;
        engine.konq = broswer.konq = parseFloat(engine.ver);
    } else if (/rv:([^\)]+)\) Gecko\/\d{8}/.test(ua)){
        engine.ver = RegExp.$1;
        engine.gecko = parseInt(engine.ver);

        //是否是firefox浏览器
        if (/firefox\/(\S+)/i.test(ua)){
            broswer.ver = RegExp.$1;
            broswer.firefox = parseFloat(broswer.ver);
        }
        **//如果这里没有检测到的firefox岂不是没有浏览器的版本信息了?**
    } else if (/MSIE ([^;]+)/.test(ua)){
        engine.ver = broswer.ver = RegExp.$1;
        engine.ie = broswer.ie = parseFloat(engine.ver);
    }

    broswer.ie = engine.ie;
    broswer.opera = engine.opera;

Gecko这內核的,除了ff以外,其他不管也可以吧,因為市佔太低

这兩句,是抄错了吧?

broswer.ie = engine.ie;
broswer.opera = engine.opera;
【热门文章】
【热门文章】