`
cuckoosnest
  • 浏览: 102449 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

javascript检测浏览器类型总结(通过useragent判断)

阅读更多
先看几个useragent,都是我本机测试的

firefox3.5
引用
Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3


chrome4.0
引用
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.202.0 Safari/532.0


IE7.0
引用
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; WebSaver; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)


Opera10.00
引用
Opera/9.80 (Windows NT 5.1; U; zh-cn) Presto/2.2.15 Version/10.00

注意安装的是10.00版本(20090917日下载安装)!

用IETester
分别是IE5.5, 6.0, 7.0, 8.0模拟的ua
引用
Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; WebSaver; Maxthon; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)

Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; WebSaver; Maxthon; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)

Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; WebSaver; Maxthon; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)

Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; WebSaver; Maxthon; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)


------------------------------------------------------------------------------------------------------

看技术文章,常见的useragent还有类似于下面的例子:

IE系列:
引用
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2)
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
Mozilla/4.0 (compatible; MSIE 5.0; Windows NT)


Firefox系列:
引用
Mozilla/5.0 (Windows; U; Windows NT 5.2) Gecko/2008070208 Firefox/3.0.1
Mozilla/5.0 (Windows; U; Windows NT 5.1) Gecko/20070309 Firefox/2.0.0.3
Mozilla/5.0 (Windows; U; Windows NT 5.1) Gecko/20070803 Firefox/1.5.0.12


Opera系列:
引用
Opera/9.27 (Windows NT 5.2; U; zh-cn)
Opera/8.0 (Macintosh; PPC Mac OS X; U; en)
Mozilla/5.0 (Macintosh; PPC Mac OS X; U; en) Opera 8.0


Safari系列:
引用
Mozilla/5.0 (Windows; U; Windows NT 5.2) AppleWebKit/525.13 (KHTML, like Gecko) Version/3.1 Safari/525.13
Mozilla/5.0 (iPhone; U; CPU like Mac OS X) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/4A93 Safari/419.3


Chrome系列:
引用
Mozilla/5.0 (Windows; U; Windows NT 5.2) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13




------------------------------------------------------------------------------------------------------

JQuery1.2, 1.3中对浏览器类型判断的代码如下

var userAgent = navigator.userAgent.toLowerCase();
// Figure out what browser is being used
jQuery.browser = {
	version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1],
	safari: /webkit/.test( userAgent ),
	opera: /opera/.test( userAgent ),
	msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ),
	mozilla: /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent )
};


这个代码会错误的把我的IE7.0判断成6.0!
而且jq1.3开始不推荐使用ua的判断,而使用特征判断。


在技术文章中看到此代码深得我心
var Sys = {};
var ua = navigator.userAgent.toLowerCase();
var s;
(s = ua.match(/msie ([\d.]+)/)) ? Sys.ie = s[1] :
(s = ua.match(/firefox\/([\d.]+)/)) ? Sys.firefox = s[1] :
(s = ua.match(/chrome\/([\d.]+)/)) ? Sys.chrome = s[1] :
(s = ua.match(/opera.([\d.]+)/)) ? Sys.opera = s[1] :
(s = ua.match(/version\/([\d.]+).*safari/)) ? Sys.safari = s[1] : 0;



加以改造成我自己用的浏览器判断代码
Y.ua = function() {
	var ua = navigator.userAgent.toLowerCase(), s, o = {};
	if( s=ua.match(/msie ([\d.]+)/) ) {
		o.ie = true;
		o.info = "ie";
	} else if( s=ua.match(/firefox\/([\d.]+)/) ) {
		o.ff = true;
		o.info = "ff";
	} else if( s=ua.match(/chrome\/([\d.]+)/) ) {
		o.chrome = true;
		o.info = "chrome";
	} else if( s=ua.match(/opera.([\d.]+)/) ) {
		o.opera = true;
		o.info = "opera";
	} else if( s=ua.match(/version\/([\d.]+).*safari/) ) {
		o.safari = true;
		o.info = "safari";
	}
	if( s && s[1] ) {
		o.version = parseFloat( s[1] );
	} else {
		o.version = 0;
	}
	o.info = (o.info?o.info:"") + "_" + o.version;
	return o;
}();


对付我本机的几个浏览器判断都正确了(除了opera10.00显示9.8的版本)



参考资料:
· JavaScript判断浏览器类型及版本
http://hi.baidu.com/zhanglinguo11/blog/item/ac9b7d4b574457f983025c5d.html  (此为转帖,原作在哪里?)

· 岁月如歌的《说说浏览器嗅探与特性探测》
http://lifesinger.org/blog/2009/01/browser-sniffing-vs-feature-detect/

· YUI 读码日记之 YAHOO.env.ua  http://www.gracecode.com/archives/1013/
  jQuery 如何检测浏览器及版本    http://www.gracecode.com/archives/696/


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics