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