IE在UserAgent中报告两个版本时意味着什么?

时间:2010-08-12 00:41:29

标签: internet-explorer

我看到IE使用者字符串有多个部分报告为不同版本的情况。例如:

   Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; 
   {B93AEBFF-7B72-44EA-B006-8CB078CC1911}; 
   Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; 
   .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; 
   .NET CLR 3.5.30729)

所以这声称是MSIE 8.0,但也是MSIE 6.0。这是否意味着什么特别的?它是IE的股票还是有什么特别之处?

我问,因为我看到报告多个版本的浏览器出现了奇怪的行为,但是没有另一个声称单个版本的IE8.0:

Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; 
Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; 
.NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)

不确定使用者是否与此有关,但我想我会问。

[更新]请注意,我不是针对特定的浏览器版本进行编码,我只是注意到这是一个奇怪的浏览器和那些没有的浏览器之间的区别。我想知道是什么会导致一些IE8.0报告他们也是IE6.0其他人没有。

3 个答案:

答案 0 :(得分:6)

Lou的答案是正确的,但我会扩展它。

用户代理字符串可用于在网页上运行的JavaScript代码。不幸的是,在Web开发人员中检查用户代理字符串以执行特定于浏览器的增强或解决方法是相当普遍(和不好)的做法。

当引入具有升级功能的新浏览器时,他们的开发人员意识到许多网站无法在其中工作或以降级方式工作,因为用户代理检查不正确并且在代码中采用了错误的路径。这导致浏览器开发人员修改其用户代理字符串,以便采用正确的路径。这导致了当前的情况,每个浏览器都假装是Mozilla,而且一般用户代理字符串都非常混乱。

因此,您看到行为不端的网站很可能正在执行用户代理检查而不是正确执行。正如Lou所说,JavaScript代码不应该尝试解析用户代理(这是一种非常脆弱的方式来测试浏览器,很可能会破坏未来版本的浏览器),而是检查浏览器功能。当前流行的JavaScript库(如jQuery)以正确的方式执行(使用它们的另一个原因)但仍然会发生自定义编写的JavaScript代码将尝试使用用户代理字符串。

答案 1 :(得分:1)

人们开始对版本进行编码,然后所有未来的用户代理字符串都需要将该版本保留在其字符串中,否则事情就会停止工作。

永远不要编写代码到用户代理字符串,代码编写功能:

http://kangax.github.io/cft/

答案 2 :(得分:1)

6.0版本实际上在8.0版本的括号内。 (当然,根据HTTP语法,它们实际上都不是有效的,但是现在几乎没有人将它视为结构化字符串。)

这篇文章似乎是B93AEBFF-7B72-44EA-B006-8CB078CC1911的唯一结果,这是可疑的。