总结:javascript判断浏览器类型与版本

除了另无它法,肯定不使用navigator.userAgent来判定浏览器。因为在第一次浏览器大战初期,Netscape占绝对统计地位,大部分人们不愿意兼容其他浏览器,并通过检测其UA让他们的网站只允许Netscape访问,这就逼使其他浏览器(包括IE)修改自己的UA伪装成Netscape来通过那些自以为是的脚本,于是出现每个人都声称自己是别人的局面,即使最新的IE9UA也是:

//Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/5.0)

下面我收集或独创的一些判定:

//2010 4 16日更新

        ie = !+"\v1" ;

 

        ie = !-[1,];//IE9预览版中失效

        ie ='\v'=='v' ;

 

        ie = !!document.recalc

        ie = !!window.VBArray

 

        ie = !!window.ActiveXObject

        ie = 0//@cc_on+1;

 

        ie = !!window.createPopup;

        ie = /*@cc_on!@*/!1;

 

        ie = document.expando;//document.all在opera firefox的古老版本也存在

        ie = /\w/.test('\u0130') //由群里的abcd友情提供

 

         

        ie6 = !"1"[0] //利用IE6或IE5的字符串不能使用数组下标的特征

 

        ie8 = !!window.XDomainRequest;

        ie9 =  document.documentMode && document.documentMode === 9;

 

        //自创,基于条件编译的嗅探脚本,IE会返回其JS引擎的版本号,非IE返回0

        var ieVersion = eval("''+/*@cc_on"+" @_jscript_version@*/-0")*1

 

        ie9 = ieVersion === 5.9

        ie8 = ieVersion === 5.8

 

        ie7 = ieVersion === 5.7

        ie6 = ieVersion === 5.6

 

        ie5 = ieVersion === 5.5

        //https://developer.mozilla.org/En/Windows_Media_in_Netscape

 

        netscape = !!window.GeckoActiveXObject

        gecko  = !!window.netscape //包括firefox

 

        firefox = !!window.Components

        firefox = !!window.updateCommands

 

        safari = !!(navigator.vendor && navigator.vendor.match(/Apple/))

        safari = window.openDatabase && !window.chrome;

 

        chrome= !!(window.chrome && window.google)

        opera=!!window.opera ;

 

        //傲游2 3

        maxthon = /maxthon/i.test(navigator.userAgent)

 

        //360安全浏览器

        is360se = /360se/i.test(navigator.userAgent)

//2010.6.4

 

       setTimeout(function(){//FF的setTimeout总是有一个额余的参数0

          var isFF = !!arguments.length;

 

          alert(isFF)

        }, 0);

 

posted @ 2010-08-30 10:24  斯人  阅读(200)  评论(0编辑  收藏  举报