全国服务热线:0776-5859998
消息中心在线申请微营销

javascript判断浏览器类型与版本

:2015-06-13 11:48     阅读数:     分享到:

要想写出跨浏览器的javascript,就必须懂得嗅探技术。这是浏览器大战遗留下的大地雷,事已如此,只好认命,乖乖写分支结构吧,函数就是这样不知不觉中变长的。

先看单一浏览器的判断,我们没有必须去找navigator.userAgent的麻烦,我在国外的博客网站收集了如下hack,短小精悍:

ie = !+"\v1" ; 02.ie ='\v'=='v' ; 03.ie = 0//@cc_on+1; 04.ie = !!top.execScript; 05.ie = /*@cc_on!@*/!1; 06.ie8 = !!window.XDomainRequest; 07.  08.//我自创的,如果是IE,会返回6,7,8代表ie6,ie7,ie8,否则返回1 09.IEVersion = (" " + (/*@cc_on @_jscript_version  @*/-1)).slice(-1) 10.  11.//基于条件编译的嗅探脚本,还有如下几个: 12.IE8=@cc_on @_jscript_version == 5.8 ? true : @false 13.IE7=@cc_on @_jscript_version == 5.7 ? true : @false 14.IE6=@cc_on @_jscript_version == 5.6 ? true : @false 15.IE55=@cc_on @_jscript_version == 5.5 ? true : @false 16.  17.  18.ff = /a/[-1]=='a'; 19.ff3 = (function  x(){})[-5]=='x'; 20.ff2 = (function x(){})[-6]=='x'; 21.  22.safari=/a/.__proto__=='//'; 23.safari = window.openDatabase; 24.  25.chrome=/source/.test((/a/.toString+'')); 26.  27.opera=!!window.opera ; 28.opera=/^function (/.test([].sort);

还有判断

//出处:http://www.cnblogs.com/xiarugu/archive/2009/02/02/1382293.html 02.function IsMaxthon() 03.{ 04.    try{ 05.        window.external.max_invoke("GetHotKey"); 06.        return true; 07.    }catch(ex){ 08.        return false; 09.    } 10.} 11.alert(IsMaxthon());

//出处:http://bbs.maxthon.cn/archiver/?tid-148353.html 02.try{ 03.        if(external.max_version.indexOf("1.")==0){ 04.                var isMaxthon1 = 1; 05.        }else{ 06.                var isMaxthon1 = 0; 07.        } 08.}catch(e){ 09.        var isMaxthon1 = 0; 10.}

如果是想搞比较复杂的UI或者类库,对于浏览器的判断就要更严格一些,不能像上面那样游兵散勇。

B=(function x(){})[-5]=='x'?'FF3':(function x(){})[-6]=='x'?'FF2':/a/[-1]=='a'?'FF':'\v'=='v'?'IE':/a/.__proto__=='//'?'Saf':/s/.test(/a/.toString)?'Chr':/^function \(/.test([].sort)?'Op':'Unknown'

在Ext3的源码中能找出如下现整的嗅探脚本:

ua = navigator.userAgent.toLowerCase(), 02. check = function(r){ 03.     return r.test(ua); 04. }, 05. isOpera = check(/opera/), 06. isChrome = check(/chrome/), 07. isWebKit = check(/webkit/), 08. isSafari = !isChrome && check(/safari/), 09. isSafari2 = isSafari && check(/applewebkit\/4/), // unique to Safari 2 10. isSafari3 = isSafari && check(/version\/3/), 11. isSafari4 = isSafari && check(/version\/4/), 12. isIE = !isOpera && check(/msie/), 13. isIE7 = isIE && check(/msie 7/), 14. isIE8 = isIE && check(/msie 8/), 15. isIE6 = isIE && !isIE7 && !isIE8, 16. isGecko = !isWebKit && check(/gecko/), 17. isGecko2 = isGecko && check(/rv:1\.8/), 18. isGecko3 = isGecko && check(/rv:1\.9/),

好了,基本就是这样了,如果你有什么发现,也敬请拿出来分享一下!


新案例
新签约
  1. 乾涵科技-高薪招聘网站PHP程序员...
  2. 成功签约广州市标准化协会网站建设协议...
  3. 成功签约佛山市领缝缝纫设备有限公司网...
  4. 成功签约深圳市创景轩园林工程有限公司...
  5. 成功签约广州狮子婴幼公学网站建设协议...
  6. 广州名阳建筑设计有限公司网站建设项目...
  7. 成功签约佛山市其乐教育投资有限公司网...
  8. 成功签约广州力恩普投资管理有限公司网...
新资讯
  1. 苹果所持现金可买Groupon+Twitter+Zynga...
  2. 世纪佳缘盈利模式受质疑 面临社交网站冲...
  3. 今年北京将采取更严厉手段打击盗版...
  4. 开心网收缩团购突裁百余人 一天内先签约...
  5. 开心网回应团购调整争论:必将负责到底...
  6. Twitter着力提升移动体验 看好HTML5长远前景...
  7. 破除有关Google面试的谣言...
  8. Windows 8也能“穿越”了...