0.5.6 中加入了对BrowserSniffer的支持。一般简单的判断客户端浏览器类型的方法,都是读取客户端的userAgent,比如 navigator.appVersion ,navigator.userAgent 等然后从UA信息中,取出浏览器版本和操作系统版本进行判断。比如我的userAgent 信息大致是这样的: 在jQuery 中的就是这么判断浏览器版本的。但是userAgent 的信息是可以伪造的,甚至有很多工具可以让用户直接修改UA信息,这样通过获取UserAgent来判断浏览器就不再准确了。 Anehta 对客户端浏览器的判断要求比较高,所以在这里采用了Browser Sniffer技术。其实就是通过各个浏览器的一些DOM对象或者是方法之间的差异,进而判断出准确的浏览器版本。在 anehta.detect.browser() 函数中实现如下过程: anehta.detect.browser = function (){ var userAgent = navigator.userAgent.toLowerCase(); return { type : function(){ /* 独立于jQuery实现 //$.browser.msie/safari/opera/mozilla if($.browser.msie){ return "msie";} else if($.browser.mozilla){return "mozilla";} else if($.browser.opera){return "opera";} else if($.browser.safari){return "safari";} else {return "unknown";} */ //alert(navigator.userAgent); // 通过一些dom对象判断浏览器指纹 ie,ie7,ie8,ff2,ff3,safari,opera,chrome,maxthon,theworld,360se.... //if (typeof document.all != "undefined"){ // msie ; firefox 在 quirks mode下也支持 if (window.ActiveXObject){ anehtaCache.setItem("BrowserSniffer", "MSIE 6.0orbelow"); // 判断是否是IE7以上 if (document.documentElement && typeof document.documentElement.style.maxHeight!="undefined" ){ // 判断是否是 IE8+ if ( typeof document.adoptNode != "undefined") { // Safari3 & FF & Opera & Chrome & IE8 anehtaCache.setItem("BrowserSniffer", "MSIE8.0"); } // 因为是精确判断,所以改写cache anehtaCache.setItem("BrowserSniffer", "MSIE7.0"); } // 不可靠的判断一些浏览器 if (userAgent.indexOf("maxthon") > -1){ anehtaCache.appendItem("BrowserSniffer", " | "+"maybe maxthon"); } if (userAgent.indexOf("360se") > -1){ anehtaCache.appendItem("BrowserSniffer", " | "+"maybe 360se"); } if (userAgent.indexOf("theworld") > -1) { anehtaCache.appendItem("BrowserSniffer", " | "+"maybe theworld"); } /* if (userAgent.indexOf("") > -1) { //anehtaCache.appendItem("BrowserSniffer", " | "+"maybe greenbrowser"); } */ return "msie"; } else if (typeof window.opera != "undefined") { //opera独占 anehtaCache.setItem("BrowserSniffer", "Opera "+window.opera.version()); return "opera"; } else if (typeof window.netscape != "undefined") { // mozilla 独占 anehtaCache.setItem("BrowserSniffer", "Mozilla"); // 可以准确识别 if (typeof window.Iterator != "undefined") { anehtaCache.setItem("BrowserSniffer", "Firefox 2"); if (typeof document.styleSheetSets != "undefined") { // Firefox 3 & Opera 9 anehtaCache.setItem("BrowserSniffer", "Firefox 3"); } } return "mozilla"; } else if (typeof window.pageXOffset != "