javascript判断浏览器类型与版本

要想写出跨浏览器的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/),

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

 

 

http://www.hunuo.com/zhuanti/web20/9785.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值