当人们说他们想要进行“浏览器检测”的时候,他们实际上经常想要进行的是“渲染引擎检测”。你实际上想要检测使用的是火狐(Firefox)还是与之对应的海猴(SeaMonkey),或者使用的是 Chrome 还是与之对应的 Chromium?或者你实际上只不过想看浏览器是否正在使用 Gecko 还是 WebKit 渲染引擎?如果这正是你需要的,请参阅后面的部分。

除了 IE 浏览器这个显著的例外,大部分的浏览器以浏览器名/版本号的格式设置浏览器名和版本。但是由于浏览器名不是用户代理字符串中唯一一个以这种格式命名的信息,你不能发现浏览器名,你只能检测是否这是你正在寻找的名字。但是要注意到,一些浏览器在说谎:例如 Chrome 的用户代理字符串中既会包含 Chrome 又会包含 Safari。所以为了检测 Safari 浏览器,你不得不检测其中是否有 Safari 字符串同时没有 Chrome 字符串,Chromium 也经常汇报它自己是 Chrome 浏览器,海猴有时也汇报它自己是火狐浏览器。

也要注意不要对浏览器名使用简单的正则表达式,用户代理字符串中也包含不属于键值对形式的字符串。例如在 Safari 和 Chrome 中包含有“like Gecko”一样的字符串。

使用用户代理字段进行浏览器检测
必须包含 禁止包含
Firefox Firefox/xyz Seamonkey/xyz
Seamonkey Seamonkey/xyz
Chrome Chrome/xyz Chromium/xyz
Chromium Chromium/xyz
Safari Safari/xyz Chrome/xyz or Chromium/xyz Safari 有两个版本号,一个技术性较强,格式是 Safari/xyz,一个对用户友好一点,格式是 Version/xyz
Opera OPR/xyz [1]Opera/xyz [2] [1] Opera 15+ (基于 Blink 的引擎)[2] Opera 12- (基于 Presto 的引擎)
Internet Explorer ; MSIE xyz; IE 浏览器的名字并没有使用BrowserName/VersionNumber的格式

当然,这里并没有保证其他浏览器不劫持上述字符串(像在过去,Chrome 劫持了 Safari 的字符串)。这就是为什么使用用户代理字段进行浏览器检测是不可信的,并且做这个检测也仅仅应该是为了检测版本号(劫持过去的版本号这种事情很少发生)。

阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。