Ruby's Louvre

The Crankiness of Belief achieves Great , not the Trick of Regulation.

javascript判断浏览器类型与版本

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

 
        //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);
 
//判定IE版本
2010.10.1
      ie = (function(undefined){
        var v = 3, div = document.createElement('div');
        while (
        div.innerHTML = '',
        div.getElementsByTagName('i')[0]);
        return v> 4 ? v : undefined;
      }());
 
//判定IE版本 2011.2.24
       ie = (function() {
          var v = 3, div = document.createElement('div'), a = div.all || [];
          while (div.innerHTML = '', a[0]);
          return v > 4 ? v : !v;
        }());
 
//手机的相关判定 2011.9.21
 isIPhone = /iPhone/i.test(navigator.userAgent);
 isIPhone4 = window.devicePixelRatio >= 2
//在网页中,pixel与point比值称为device-pixel-ratio,普通设备都是1,iPhone 4是2,有些Android机型是1.5
//http://blog.webcreativepark.net/2011/01/25-173502.html
 isIPad = /iPad/i.test(navigator.userAgent);
 isAndroid = /android/i.test(navigator.userAgent);
 isIOS = isIPhone  || isIPad ;
isMobile = isIOS || isAndroid ;
标签: javascript

posted on 2009-10-14 16:54 司徒正美 阅读(2850) 评论(14) 编辑 收藏

评论

#1楼 2009-10-14 17:32 oec2003      

嗯 这个不错  回复 引用 查看   

#2楼 2009-10-14 17:38 三桂      

看了下博客上的flash时钟,发现又快要下班了...  回复 引用 查看   

#3楼 2009-10-14 17:49 凡客诚品网[未注册用户]

不错啊!  回复 引用   

#4楼 2009-10-14 18:33 vieri122      

还在加班,看完这贴回家  回复 引用 查看   

#5楼 2009-10-14 23:39 马劲      

高人啊 还不知道有这招  回复 引用 查看   

#6楼 2009-10-15 09:15 生鱼片      

这个很实用  回复 引用 查看   

#7楼 2009-10-15 10:57 lexc[未注册用户]

最后一个,不是IE7也不是IE8的IE就是IE6了。。。  回复 引用   

#8楼 2009-10-15 11:30 我不配      

用JQuery就不关浏览器的兼容问题了吧////  回复 引用 查看   

#9楼 2009-10-15 11:53 Ryanlulu      

收藏了 哈哈  回复 引用 查看   

#10楼 2009-11-09 18:07 兲恏蒿      

window.openDatabase这个chrome也支持  回复 引用 查看   

#11楼 2009-11-26 14:45 Franky      

呵呵 好全的判断 顶  回复 引用 查看   

#12楼[楼主] 2009-11-28 13:24 司徒正美      

@兲恏蒿
谢谢提醒
safari = window.openDatabase && !external.AddSearchProvider;
 回复 引用 查看   

#13楼 2010-02-04 18:02 sohighthesky      

ff = /a/[-1]=='a';
哎,杯具,今天专门来找了这个,后来别人说有问题,原来FF3.6不行了
 回复 引用 查看   

#14楼 2010-04-16 13:36 lhgcore.J      

IE还有个!!window.ActiveXObject
 回复 引用 查看