使用 javascript 检测 Microsoft 的边缘或 spartan

Detecting Microsoft's edge or spartan with javascript

Edge 或 Spartan 浏览器的用户代理是否已知?谁能告诉我如何检测此浏览器并在其发布之前将其与 IE 区分开来?

一个简单的 google 搜索找到了您正在寻找的答案: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+"

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

I detail why in this blog post.

Neowin 最近报道说,微软 Windows10 的新浏览器 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 上写道:Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) 就像 Gecko 一样,如 post.

中所解释

什么是用户代理嗅探?

通常,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, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10136

Patrick H. Lauke 在 W3C 讨论中将 userAgent 属性 恰当地描述为“一堆不断增长的谎言”。 (“或者更确切地说,添加足够多的遗留关键字的平衡行为不会立即让旧的 UA 嗅探代码失败,同时仍然试图传达一些实际有用和准确的信息。”)

我们建议网络开发人员尽可能避免 UA 嗅探;现代网络平台的功能几乎都可以通过简单的方式检测到。在过去的一年里,我们看到一些 UA 嗅探网站已经更新以检测 Microsoft Edge……只是为了为其提供旧的 IE11 代码路径。这不是最好的方法,因为 Microsoft Edge 匹配“WebKit”行为,而不是 IE11 行为(任何 Edge-WebKit 差异都是我们有兴趣修复的错误)。

根据我们的经验,Microsoft Edge 在这些站点的“WebKit”代码路径上运行得最好。此外,随着互联网在越来越多的设备上可用,请假设未知浏览器是好的——请不要将您的站点限制为只能在一小部分当前已知的浏览器上运行。如果这样做,您的网站将来几乎肯定会崩溃。

结论

通过提供 Chrome UA 字符串,我们可以解决这些开发人员正在使用的黑客攻击,为用户提供最佳体验。

在 UA 字符串中查找 "Edge"。

虽然在营销人员的心目中世界是完美的,但实际上浏览器存在多年未修复的错误,而且这种情况永远如此。

在我的例子中,需要我测试 Edge 与 Chrome 的问题是 Chrome 下拉高度错误 Spartan/Edge 正确呈现。微软在这里没有什么可以修复的,Google 一年多来一直忽略这个错误(它在旧版本的 Chrome 中正确呈现)。

根据this answer

// Internet Explorer 6-11
var isIE = /*@cc_on!@*/false || !!document.documentMode;
// Edge 20+
var isEdge = !isIE && !!window.StyleMedia;

另一个基于特征检测的选项。

function isBrowserEdge () {
    return typeof CSS !== 'undefined' && CSS.supports("(-ms-ime-align:auto)");
}