【 以下文字转载自 Google 讨论区 】
发信人: modico (modico), 信区: Google
标 题: gmail client code review,part 2
发信站: 水木社区 (Thu Oct 19 17:28:37 2006), 站内
吼吼,到了浏览器检测这部分了。现在的浏览器太多了,害得即使是google的代码都非常难看。估计需要有一面墙来贴一个大矩阵,还好一点。UserAgent的复杂性在于,浏览器A的名字往往冠以其它浏览器的特征字,有些还不止一个。这个风气当然是微软先搞起来的。当年Netscape独大的时候,IE一开始用的UserAgent类似于Microsoft Internet Explorer/4.0b1 (Windows 95), 但马上就换成 Mozilla/..., 因为当时的Netscape就是 Mozilla/...,Mozilla/ 后面的某个位置,再写上自己的名字 MSIE。现如今,IE独大,其它浏览器们就仿照这个做法,不仅 Mozilla/, 还 MSIE,然后再写上自己的名字,如 Mozilla/4.0 (compatible; MSIE 5.0; Windows 2000) Opera 6.03 [en]. 这下麻烦大了,要基本准确的判断一个浏览器费劲了。
google要用50行左右的代码来判断浏览器。
opera 最好判断,目前没人报它的名,所以只要包含 opera 串就可基本认定;
IE 的话,google是这样判断的,有 msie,而且没有 opera, 且支持 document.all;
在此基础上,继续判断是否是 IE5,IE6,IE7;
Konqueror,方法跟opera类似;
判断是否用的 KHTML显示引擎,这个通常是Safari和Konqueror;
如果是KHTML引擎的话,还要判断 AppleWebKit 的版本是否不低于 420;
Camino,方法跟opera类似;
在此基础上判断版本是否不低于1;
判断是否既非IE,又非KHTML的图形浏览器,Opera应也属此类。
判断是否Gecko引擎,且Rv版本是否不低于7,不低于8,Firefox,Mozilla应属此类。
是否Netscape7;
是否Netscape8;
若是Netscape8的话,还要判断它用的是MSHTML引擎,还是Gecko引擎;唉!!!
接着是判断操作系统,MAC, LINUX, WINXP, WIN2K, WIN2K/XP/2003 系列;
最后的这个WINNT5系列(5.0/5.1/5.2),不包括微软将出的Vista,它是NT 6。
--
FROM 218.249.84.*