使用JavaScript检测Microsoft Edge或Spartan浏览器

20

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


19
谁在意呢?这仍然是我想要知道答案的问题 :) 正在研究中... - kieranpotts
@Cerbrus,我知道这个问题,但在这种情况下我无法避免这样做。此外,有成千上万的关于检测IE 9、10或11的问题,我不知道为什么这个问题不合法。 - Vandervals
1
@Cerbrus 有时候这很重要,特别是与插件兼容性有关。例如,一家公司正在使用一个插件,该插件不支持Edge,并且Edge本身不支持插件所做的事情。 - Dave Newton
9
浏览器检测并不总是不好的,有时候也无法进行特性检测。经典例子就是与CSS 3D变换相关的渲染错误。如果进行特性检测,那些特性是存在的,但是它们是有问题的。因此,你只能通过用户代理嗅探来管理3D降级,直到有问题的浏览器被修复为止。 - CodeToad
2
可能是重复的问题,关于如何检测Safari、Chrome、IE、Firefox和Opera浏览器的问题,请参考以下链接:https://dev59.com/vGkw5IYBdhLWcg3wg6ug - adamdport
显示剩余4条评论
5个回答

18

一个简单的谷歌搜索就可以为你找到你要寻找的答案: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+"


2
您应该匹配“Edge /”后面跟着一个数字值。版本号会随时间而变化。 - kieranpotts
7
如果在字符串中检测到Edge/\d+,你就可以确定用户代理是Edge浏览器。 - Supamiu
2
@Sapumiu刚刚提供了我认为将成为嗅探Microsoft Edge的正则表达式。目前没有其他主流浏览器包含此字符串在其用户代理中。...在旧的非标准时代,如果网站与IE等浏览器不兼容,网站管理员会阻止这些浏览器。因此,浏览器制造商开始在其UA字符串中加入“Mozilla”以试图阻止这种做法。在现代标准时代,许多浏览器共享相同(或分叉)的渲染引擎,这就是为什么Chrome也报告自己为Safari的原因!这就是为什么Web分析永远无法100%准确的原因! - kieranpotts
无法工作。来自modern.ie的Win10虚拟机 "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" - Edi
1
我不喜欢用户代理嗅探。我更喜欢直接的方法:https://dev59.com/vGkw5IYBdhLWcg3wg6ug - avgvstvs
显示剩余4条评论

7
根据这个答案
// Internet Explorer 6-11
var isIE = /*@cc_on!@*/false || !!document.documentMode;
// Edge 20+
var isEdge = !isIE && !!window.StyleMedia;

4

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应该对每个人都可访问,无论他们使用哪种浏览器或设备。有多种方法可以根据功能的可用性而不是针对特定浏览器来开发您的网站以逐步增强自身。

这是一篇解释User Agent历史的很棒的文章。

通常,懒惰的开发人员将只嗅探UA字符串,并基于他们认为用户正在使用的浏览器禁用其网站上的内容。 Internet Explorer 8是开发人员的常见烦恼点,因此他们经常检查用户是否使用IE的任何版本,并禁用功能。

Edge团队在他们的博客中更深入地介绍了这一点。

所有用户代理字符串都包含有关其他浏览器的更多信息,而不仅仅是标记,还包括“有意义”的版本号。

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字符串,我们可以解决这些开发人员正在使用的问题,向用户提供最佳体验。


3

另一种基于特性检测的选择。

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

1
在UA字符串中查找“Edge”。虽然在市场营销人员的想象中,世界是完美的,但实际上浏览器存在无法修复多年的漏洞,而且这种情况将永远存在。在我的情况下,需要测试Edge与Chrome之间的问题是Chrome下拉菜单高度错误,而Spartan/Edge正确呈现。Microsoft在这里没有什么需要修复的,而Google已经忽略了这个错误一年多了(在旧版本的Chrome中呈现正确)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接