internet-explorer - 当IE在UserAgent中报告两个版本时,这是什么意思?

标签 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)

不知道useragent是否与此有关,但是我想问一下。

[更新]请注意,我并没有针对特定的浏览器版本进行编码,我只是注意到这是行为异常的浏览器与行为异常的浏览器之间的区别。我想知道是什么导致某些IE8.0报告它们不是IE6.0。

最佳答案

Lou的回答是正确的,但我会继续说明。

用户代理字符串可用于网页上运行的JavaScript代码。不幸的是,Web开发人员通常会检查用户代理字符串以执行特定于浏览器的增强功能或变通方法,这是相当普遍的(也是不好的)做法。

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

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

关于internet-explorer - 当IE在UserAgent中报告两个版本时,这是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3463915/

相关文章:

Javascript Countdown 在 IE 和 Firefox 中显示 NaN,在 Chrome 中有效

html - 即使我们没有使用任何新的 css 3 属性/选择器,firefox 3 和 3.5 以及 IE 7 和 8 之间是否存在渲染差异的可能性?

c# - FormsAuthentication 适用于除 IE 之外的所有浏览器

javascript - 使用 jquery 选择选项在 IE 中不起作用?

javascript - 在 IE 中处理 Javascript 事件顺序

CSS 在 IE 中使用过滤器导致 IE 滞后

jQuery 验证器 - 在 IE 中突出显示下拉列表

javascript - 正在使用 var foo = function foo() {};在 IE < 9 中创建内存泄漏的表达式?

visual-studio-2008 - 如何关闭 Visual Studio 2008 脚本调试

html - Internet Explorer 10 css3 过渡高度不会随父填充底部值发生