Edge或Spartan浏览器的用户代理已知吗?有人能告诉我如何检测此浏览器并在其发布之前与IE区分开来吗?
Edge或Spartan浏览器的用户代理已知吗?有人能告诉我如何检测此浏览器并在其发布之前与IE区分开来吗?
一个简单的谷歌搜索就可以为你找到你要寻找的答案:http://forum.piwik.org/read.php?3,125732
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0
因此,您应该匹配:"Edge\/\d+"
// Internet Explorer 6-11
var isIE = /*@cc_on!@*/false || !!document.documentMode;
// Edge 20+
var isEdge = !isIE && !!window.StyleMedia;
Microsoft Edge UA字符串:
Mozilla/5.0(Windows NT 10.0)AppleWebKit/537.36(KHTML,like Gecko)Chrome/42.0.2311.135 Safari/537.36 Edge/12.10136
Neowin最近报道称,微软的新浏览器Spartan使用Chrome UA字符串:“Mozilla/5.0(Windows NT 10.0; WOW64)AppleWebKit/537.36(KHTML,like Gecko)Chrome/39.0.2171.71 Safari/537.36 Edge/12.0″。 这是有意为之的。
您还会注意到整个字符串以“Edge/12.0”结束,而Chrome没有。
我应该指出,这并不是微软在IE 11上所做的彻底改变,在Windows 8上,IE 11的UA字符串为:Mozilla/5.0(Windows NT 6.3; Trident/7.0; rv:11.0)like Gecko,如本文所述。
什么是User Agent嗅探?
通常,Web开发人员会使用UA嗅探进行浏览器检测。Mozilla在其博客上很好地解释了这一点:
为不同的浏览器提供不同的Web页面或服务通常是一个坏主意。Web应该对每个人都可访问,无论他们使用哪种浏览器或设备。有多种方法可以根据功能的可用性而不是针对特定浏览器来开发您的网站以逐步增强自身。
通常,懒惰的开发人员将只嗅探UA字符串,并基于他们认为用户正在使用的浏览器禁用其网站上的内容。 Internet Explorer 8是开发人员的常见烦恼点,因此他们经常检查用户是否使用IE的任何版本,并禁用功能。
所有用户代理字符串都包含有关其他浏览器的更多信息,而不仅仅是标记,还包括“有意义”的版本号。
Internet Explorer 11的UA字符串:
Mozilla/5.0(Windows NT 6.3; Trident/7.0; rv:11.0)like Gecko
Microsoft Edge UA字符串:
Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10136
UA(User Agent)属性被Patrick H. Lauke形容为“一个越来越长的谎言包”,他在W3C讨论中说:“或者更确切地说,是在添加足够的旧版关键字以避免旧的UA-sniffing代码崩溃的平衡过程中,同时仍然试图传达一些实际有用和准确的信息。”
我们建议Web开发人员尽可能避免UA-Sniffing;现代Web平台功能几乎都可以通过简单的方式检测到。在过去的一年中,我们看到了一些UA-Sniffing站点已经更新以检测Microsoft Edge……只提供了一个旧的IE11代码路径。这不是最好的方法,因为Microsoft Edge与'WebKit'行为匹配,而不是IE11行为(任何Edge-WebKit差异都是我们感兴趣的错误)。
根据我们的经验,Microsoft Edge在这些站点上最好使用'WebKit'代码路径运行。此外,随着互联网变得可用于更广泛的设备,请假定未知浏览器是好的 - 请不要将您的站点限制在仅适用于一小组当前已知浏览器上。如果这样做,您的站点几乎肯定会在未来崩溃。
结论
通过呈现Chrome UA字符串,我们可以解决这些开发人员正在使用的问题,向用户提供最佳体验。
另一种基于特性检测的选择。
function isBrowserEdge () {
return typeof CSS !== 'undefined' && CSS.supports("(-ms-ime-align:auto)");
}