我正在测试一个在Microsoft Edge中工作的网站,奇怪的是ExtJS 3.2.1将其检测为Chrome(当我使用Ext.isChrome
时它返回true
)。以前有其他人遇到过这个问题吗?如果有,是否有解决方法?
这是用户代理字符串:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.9600
答案 0 :(得分:5)
这是可以预料的。 I detail why in this blog post.
Neowin最近报道微软新推出的适用于Windows 10的浏览器Spartan使用Chrome UA字符串,“Mozilla / 5.0(Windows NT 10.0; WOW64)AppleWebKit / 537.36(KHTML,如Gecko)Chrome / 39.0.2171.71 Safari / 537.36 Edge / 12.0“。 这是故意的。您还会注意到整个字符串以“Edge / 12.0”结尾,而Chrome则没有。
我应该指出,这与微软对IE 11的做法没有根本的不同,后者在Windows 8上读取:Mozilla / 5.0(Windows NT 6.3; Trident / 7.0; rv:11.0),如Gecko,在这篇文章中解释过。
什么是用户代理嗅探?
通常,Web开发人员会使用UA嗅探进行浏览器检测。 Mozilla在他们的博客上解释得很好:
向不同的浏览器提供不同的网页或服务通常是一个坏主意。无论用户使用哪种浏览器或设备,Web都可供所有人访问。有一些方法可以开发您的网站,以便根据功能的可用性逐步增强自身,而不是针对特定的浏览器。
Here’s a great article explaining the history of the User Agent.
通常,懒惰的开发人员只会嗅探UA字符串并根据他们认为观看者正在使用的浏览器禁用其网站上的内容。 Internet Explorer 8是开发人员常见的挫折点,因此他们会经常检查用户是否使用任何版本的IE,并禁用功能。
The Edge team details this even deeper on their blog.
所有用户代理字符串都包含有关除您使用的实际浏览器之外的其他浏览器的更多信息 - 不仅包括令牌,还包含“有意义”的版本号。
Internet Explorer 11的UA字符串:
Mozilla / 5.0(Windows NT 6.3; Trident / 7.0; rv:11.0),如Gecko
Microsoft Edge UA字符串:
Mozilla / 5.0(Windows NT 10.0)AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 42.0.2311.135 Safari / 537.36 Edge / 12.10136
Patrick H. Lauke在W3C讨论中恰当地将userAgent属性描述为“一堆不断增长的谎言”。 (“或者更确切地说,添加足够的遗留关键字的平衡行为不会立即使旧的UA嗅探代码崩溃,同时仍然试图传达一些实际有用和准确的信息。”)
我们建议Web开发人员尽可能避免UA嗅探;现代网络平台功能几乎都可以通过简单的方式检测到。在过去的一年中,我们已经看到一些UA嗅探网站已被更新以检测Microsoft Edge ...仅为其提供传统的IE11代码路径。这不是最好的方法,因为Microsoft Edge匹配'WebKit'行为,而不是IE11行为(任何Edge-WebKit差异都是我们有兴趣修复的错误)。
根据我们的经验,Microsoft Edge在这些站点中的“WebKit”代码路径上运行得最好。此外,随着互联网在更广泛的设备上可用,请假设未知的浏览器是好的 - 请不要限制您的网站只在一小部分当前已知的浏览器上工作。如果你这样做,你的网站将来几乎肯定会破产。
<强>结论强>
通过展示Chrome UA字符串,我们可以解决这些开发人员正在使用的黑客攻击,为用户提供最佳体验。