【问题标题】:Detecting Microsoft's edge or spartan with javascript使用 javascript 检测微软的边缘或斯巴达
【发布时间】:2015-10-09 07:15:45
【问题描述】:

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

【问题讨论】:

  • 谁在乎?这仍然是一个我想知道答案的问题:) 正在研究...
  • @Cerbrus,我知道这一点,但在这种情况下,我无法避免这样做。此外,关于检测 ie 9. 10 或 11 的问题有数千个,我不知道为什么这个不合法
  • @Cerbrus 有时它很重要,尤其是在插件兼容性方面。例如,一家公司正在使用不支持 Edge 的插件,而 Edge 本身不支持该插件的功能。
  • 浏览器检测并不总是很糟糕,而且它并不总是可以进行特征检测。一个典型的例子是渲染与 css 3D 变换相关的错误。如果您进行功能检测,则功能存在,但它们已损坏。因此,您可以选择通过用户代理嗅探管理 3D 降级,直到有问题的浏览器得到修复。

标签: javascript browser user-agent


【解决方案1】:

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

【讨论】:

  • 那么,我应该匹配"Edge/12.0" 吗?
  • 您应该匹配“Edge/”后跟一个数值。版本号会随着时间而改变。
  • 如果在字符串中检测到 Edge\/\d+,则可以确定 User Agent 是 Edge one...
  • @Sapumiu 刚刚提供了我认为将是嗅探 Microsoft Edge 的权威正则表达式。没有其他主流浏览器(当前)在其用户代理中包含此字符串。 ...在过去的非标准时代,如果网站与 IE 等浏览器不兼容,网站管理员会阻止浏览器。因此,浏览器制造商开始在他们的 UA 字符串中加入“Mozilla”,试图阻止这种做法。在现代标准时代,许多浏览器共享相同的(或分叉的)渲染引擎,这就是 Chrome 也将自己报告为 Safari 的原因!这就是为什么网络分析永远不可能 100% 准确的原因!
  • 我不喜欢 UA 嗅探。我更喜欢直接的方法:stackoverflow.com/questions/9847580/…
【解决方案2】:

根据this answer

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

【讨论】:

    【解决方案3】:

    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 最近报道称,微软针对 Windows 10 的新浏览器 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) like Gecko,as在这篇文章中解释。

    什么是用户代理嗅探?

    Web 开发人员通常会通过 UA 嗅探来检测浏览器。 Mozilla 在他们的博客上很好地解释了这一点:

    为不同的浏览器提供不同的网页或服务通常是个坏主意。网络意味着每个人都可以访问,无论他们使用哪种浏览器或设备。有多种方法可以让您的网站根据功能的可用性逐步增强自身,而不是针对特定的浏览器。

    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 嗅探代码崩溃,同时仍试图传达一些实际有用和准确的信息的平衡行为。”)

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

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

    结论

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

        在 UA 字符串中查找“Edge”。

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

        就我而言,需要我测试 Edge 与 Chrome 的问题是 Spartan/Edge 正确呈现的 Chrome 下拉高度错误。微软在这里没有什么可以修复的,而且谷歌已经忽略了这个错误一年多(它在旧版本的 Chrome 中正确呈现)。

        【讨论】:

          猜你喜欢
          • 2018-08-24
          • 1970-01-01
          • 1970-01-01
          • 2023-03-16
          • 1970-01-01
          • 2019-03-15
          • 1970-01-01
          • 2021-09-02
          • 2018-10-15
          相关资源
          最近更新 更多