检测Microsoft';使用javascript的s edge或spartan

检测Microsoft';使用javascript的s edge或spartan,javascript,browser,user-agent,Javascript,Browser,User Agent,Edge或Spartan浏览器的用户代理是否已知?有人能告诉我如何在发布之前检测此浏览器并将其与IE区分开来吗?通过简单的谷歌搜索,我找到了您想要的答案: 因此,您应该匹配:“Edge\/\d+”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 Neowin最近报道说,微软针对Wind

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

通过简单的谷歌搜索,我找到了您想要的答案:


因此,您应该匹配:
“Edge\/\d+”

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

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没有

我要指出的是,这与微软在IE11上所做的并不是完全不同,IE11在Windows8上的内容是:Mozilla/5.0(WindowsNT6.3;Trident/7.0;rv:11.0),就像Gecko一样,正如本文所解释的

什么是用户代理嗅探?

通常,web开发人员会嗅探浏览器检测。Mozilla在他们的博客上对此做了很好的解释:

为不同的浏览器提供不同的网页或服务通常不是一个好主意。网站的目的是让每个人都可以访问,而不管他们使用的是哪种浏览器或设备。有一些方法可以开发网站,根据功能的可用性而不是针对特定的浏览器来逐步增强自身

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

所有用户代理字符串都包含有关其他浏览器的更多信息,而不是您正在使用的实际浏览器–不仅是令牌,还有“有意义的”版本号

Internet Explorer 11的UA字符串:

Mozilla/5.0(WindowsNT6.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嗅探;现代web平台功能几乎都可以通过简单的方式检测到。在过去的一年中,我们看到一些UA嗅探网站已经更新以检测Microsoft Edge…只是为其提供了一个遗留的IE11代码路径。这不是最好的方法,因为Microsoft Edge匹配“WebKit”行为,而不是IE11行为(任何边缘WebKit差异都是我们感兴趣修复的bug)

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

结论

通过展示Chrome UA字符串,我们可以绕过这些开发者使用的黑客,向用户展示最佳体验。

在UA字符串中寻找“边缘”

虽然在市场营销人员的心目中,世界是完美的,但事实上,浏览器的bug多年来一直没有修复,而且永远都是这样

在我的例子中,需要我测试Edge与Chrome的对比的问题是Spartan/Edge正确渲染的Chrome下拉高度错误。Microsoft在这里没有任何问题需要修复,Google已经忽略该错误一年多了(它在Chrome的旧版本中正确渲染)。

根据:


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

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

谁在乎呢?这仍然是一个我想知道答案的问题:)研究…@Cerbrus,我知道这一点,但在这种情况下,我无法避免这样做。此外,关于检测ie 9.10或11,有成千上万的问题,我不知道为什么这一个不是legitimate@Cerbrus它有时很重要,特别是在插件兼容性方面例如,一家公司正在使用一个插件,该插件不支持Edge,Edge本身也不支持该插件的功能。浏览器检测并不总是不好的,也不总是能够进行功能检测。一个典型的例子是呈现与css 3D转换相关的错误。如果进行功能检测,功能就在那里,但它们是broken。因此,您可以选择通过用户代理嗅探来管理3D降级,直到有问题的浏览器被修复。可能存在重复的So,我是否应该匹配
“Edge/12.0”
?您应该匹配“Edge/”后跟一个数字值。版本号将随时间变化。如果在字符串中检测到Edge\/\d+,则可以确保用户代理是Edge代理…@Sapumiu刚刚提供了我认为可以嗅探Microsoft Edge的最终正则表达式。目前没有其他主流浏览器在他们的用户代理中包含此字符串…在旧的非标准时代,如果网站与IE等浏览器不兼容,网站管理员通常会阻止浏览器。因此,浏览器制造商开始在UA字符串中添加“Mozilla”以阻止这种做法。在现代标准时代,许多浏览器共享相同(或分叉)渲染引擎
// 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)");
}