先看几个useragent,都是我本机测试的
firefox3.5
[quote]Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.3) Gecko/0824 Firefox/3.5.3[/quote]
chrome4.0
[quote]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[/quote]
IE7.0
[quote]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)[/quote]
Opera10.00
[quote]Opera/9.80 (Windows NT 5.1; U; zh-cn) Presto/2.2.15 Version/10.00[/quote]
注意安装的是10.00版本(0917日下载安装)!
用IETester
分别是IE5.5, 6.0, 7.0, 8.0模拟的ua
[quote]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)[/quote]
------------------------------------------------------------------------------------------------------
看技术文章,常见的useragent还有类似于下面的例子:
IE系列:
[quote]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)[/quote]
Firefox系列:
[quote]Mozilla/5.0 (Windows; U; Windows NT 5.2) Gecko/070208 Firefox/3.0.1
Mozilla/5.0 (Windows; U; Windows NT 5.1) Gecko/0309 Firefox/2.0.0.3
Mozilla/5.0 (Windows; U; Windows NT 5.1) Gecko/0803 Firefox/1.5.0.12[/quote]
Opera系列:
[quote]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[/quote]
Safari系列:
[quote]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[/quote]
Chrome系列:
[quote]Mozilla/5.0 (Windows; U; Windows NT 5.2) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13[/quote]
------------------------------------------------------------------------------------------------------
JQuery1.2, 1.3中对浏览器类型判断的代码如下
// 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 ) };var userAgent = navigator.userAgent.toLowerCase();
这个代码会错误的把我的IE7.0判断成6.0!
而且jq1.3开始不推荐使用ua的判断,而使用特征判断。
在技术文章中看到此代码深得我心
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;var Sys = {};
[b]加以改造成我自己用的浏览器判断代码[/b]
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判断浏览器类型及版本
/zhanglinguo11/blog/item/ac9b7d4b574457f983025c5d.html (此为转帖,原作在哪里?)
· 岁月如歌的《说说浏览器嗅探与特性探测》
/blog//01/browser-sniffing-vs-feature-detect/
· YUI 读码日记之 YAHOO.env.ua /archives/1013/
jQuery 如何检测浏览器及版本 /archives/696/