我看到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/