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插件来判断,支持比较完善

你可能感兴趣的:(客户端)