热烈祝贺台州朗动科技的站长论坛隆重上线!(2012-05-28)    热烈庆祝伟大的祖国60周年生日 点击进来我们一起为她祝福吧(2009-09-26)    站长论坛禁止发布广告,一经发现立即删除。谢谢各位合作!.(2009-08-08)    热烈祝贺台州网址导航全面升级,全新版本上线!希望各位一如既往地支持台州网址导航的发展.(2009-03-28)    台州站长论坛恭祝各位新年快乐,牛年行大运!(2009-01-24)    台州Link正式更名为台州网址导航,专业做以台州网址为主的网址导航!(2008-05-23)    热烈祝贺台州Link资讯改名为中国站长资讯!希望在以后日子里得到大家的大力支持和帮助!(2008-04-10)    热烈祝贺台州Link论坛改名为台州站长论坛!希望大家继续支持和鼓励!(2008-04-10)    台州站长论坛原[社会琐碎]版块更名为[生活百科]版块!(2007-09-05)    特此通知:新台州站长论坛的数据信息全部升级成功!">特此通知:新台州站长论坛的数据信息全部升级成功!(2007-09-01)    台州站长论坛对未通过验证的会员进行合理的清除,请您谅解(2007-08-30)    台州网址导航|上网导航诚邀世界各地的网站友情链接和友谊联盟,共同引领网站导航、前进!(2007-08-30)    禁止发广告之类的帖,已发现立即删除!(2007-08-30)    希望各位上传与下载有用资源和最新信息(2007-08-30)    热烈祝贺台州站长论坛全面升级成功,全新上线!(2007-08-30)    
便民网址导航,轻松网上冲浪。
台州维博网络专业开发网站门户平台系统
您当前的位置: 首页 » JavaScript/JQuery编程 » javascript判断浏览器类型与版本

javascript判断浏览器类型与版本

论坛链接
  • javascript判断浏览器类型与版本
  • 发布时间:2009-10-16 15:41:31    浏览数:7777    发布者:superadmin    设置字体【   
要想写出跨浏览器的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/),


好了,基本就是这样了,如果你有什么发现,也敬请拿出来分享一下!
娱乐休闲专区A 影视预告B 音乐咖啡C 英语阶梯D 生活百科
网页编程专区E AMPZF HTMLG CSSH JSI ASPJ PHPK JSPL MySQLM AJAX
Linux技术区 N 系统管理O 服务器架设P 网络/硬件Q 编程序开发R 内核/嵌入
管理中心专区S 发布网址T 版主议事U 事务处理