js之客户端检测

1 能力检测
判断是否有某个属性或方法,例:在低版本中的opera浏览器中,window下有个opera属性

if (window.opera) {
    alert("opera");
}

2 怪癖检测
通常是浏览器存在某种bug导致的,例:ie9-中如果对象有成员方法toString,则在在for-in中不会被遍历到
这种检测可能会因为bug在高版本中被修复而失效

var testObj = new Object();
testObj.toString = function() {
    return "testObje";
};
for (var p in testObj) {
    if (p == "toString") {
        alert("这是非ie浏览器");
    }
}

3 userAgent检测
这是最后使用的方法,通过navigator.userAgent可以检测出浏览器的大部分信息
但由于浏览器的userAgent也不是固定不变的,所以这个方法也不是最安全的
例:opera在16-版本前使用引擎为Presto,后面使用AppleWebKit

function TestNavigator() {
    var ua = navigator.userAgent;
    var engine = {
        ie: false,
        firefox: false,
        safari: false,
        chrome:false,
        opera: false,
        ver: ""
    };
    if (window.opera) {
        engine.opera = true;
        engine.ver = window.opera.version();
    } else if (ua.indexOf("AppleWebKit") != -1) {
        if (/OPR\/(\S+)/.test(ua)) {
            engine.opera = true;
            engine.ver = RegExp["$1"];
        } else if(/Chrome\/(\S+)/.test(ua)) {
            engine.chrome = true;
            engine.ver = RegExp["$1"];
        } else if (/Version\/(\S+)/.test(ua)) {
            engine.safari = true;
            engine.ver = RegExp["$1"];
        }
    } else if(/Firefox\/(\S+)/.test(ua)) {
        engine.firefox = true;
        engine.ver = RegExp["$1"];
    } else if (/MSIE ([^;])/.test(ua)) {
        engine.ie = true;
        engine.ver = RegExp["$1"];
    }
    return engine;
}

4 使用browserdetect.js等js插件来判断,支持比较完善

posted on 2013-10-29 13:55  穆穆  阅读(1228)  评论(0编辑  收藏  举报