javascript判断浏览器类型与版本
来源:互联网 发布:java中格式化时间毫秒 编辑:程序博客网 时间:2024/03/29 10:28
要想写出跨浏览器的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.
ie
8
= !!window.XDomainRequest;
07.
08.
//我自创的,如果是IE,会返回
6
,
7
,
8
代表ie
6
,ie
7
,ie
8
,否则返回
1
09.
IEVersion = (
" "
+ (
/*@cc_on @_jscript_version @*/
-1
)).slice(
-1
)
10.
11.
//基于条件编译的嗅探脚本,还有如下几个:
12.
IE
8
=@cc_on @_jscript_version ==
5.8
? true : @false
13.
IE
7
=@cc_on @_jscript_version ==
5.7
? true : @false
14.
IE
6
=@cc_on @_jscript_version ==
5.6
? true : @false
15.
IE
55
=@cc_on @_jscript_version ==
5.5
? true : @false
16.
17.
18.
ff = /a/[
-1
]==
''a''
;
19.
ff
3
= (function x(){})[
-5
]==
''x''
;
20.
ff
2
= (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 isMaxthon
1
=
1
;
05.
}else{
06.
var isMaxthon
1
=
0
;
07.
}
08.
}catch(e){
09.
var isMaxthon
1
=
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.
isSafari
2
= isSafari && check(/applewebkit//
4
/), // unique to Safari
2
10.
isSafari
3
= isSafari && check(/version//
3
/),
11.
isSafari
4
= isSafari && check(/version//
4
/),
12.
isIE = !isOpera && check(/msie/),
13.
isIE
7
= isIE && check(/msie
7
/),
14.
isIE
8
= isIE && check(/msie
8
/),
15.
isIE
6
= isIE && !isIE
7
&& !isIE
8
,
16.
isGecko = !isWebKit && check(/gecko/),
17.
isGecko
2
= isGecko && check(/rv:
1
/.
8
/),
18.
isGecko
3
= isGecko && check(/rv:
1
/.
9
/),
好了,基本就是这样了,如果你有什么发现,也敬请拿出来分享一下!
http://www.hunuo.com/zhuanti/web20/9785.html
- javascript判断浏览器类型与版本
- javascript判断浏览器类型与版本
- javascript判断浏览器类型与版本
- [转]javascript判断浏览器类型与版本
- javascript判断浏览器类型与版本
- Javascript JavaScript判断浏览器类型及版本
- 使用javascript判断浏览器版本类型
- JavaScript判断浏览器类型及版本
- JavaScript判断浏览器类型及版本
- JavaScript判断浏览器类型及版本
- 通过javascript判断浏览器类型以及版本
- JavaScript判断浏览器类型及版本
- JavaScript判断浏览器类型及版本
- JavaScript判断浏览器类型及版本
- JavaScript判断浏览器类型及版本
- JavaScript判断浏览器类型及版本
- JavaScript判断浏览器类型及版本
- JavaScript判断浏览器类型及版本
- 【转载】iphone九宫格界面实现
- 靠谱的程序员太少了
- colinux和windows主机共享上网
- Flex 4双向数据绑定
- Motorola vs Nokia
- javascript判断浏览器类型与版本
- strToInt
- uva 568 - Just the Facts
- 指针强制转换问题
- ubuntu下codeblocks 设置qt开发环境
- hdu 2036 (求多边形面积)
- struts2.2的路径匹配(struts2与servlet的耦合)
- 初尝NokiaQtSDK
- 角色脱节与失衡条件下,仅靠一己之责,事态发展必定走向无力回天