代码之家  ›  专栏  ›  技术社区  ›  Vandervals

使用javascript检测Microsoft的边缘或spartan

  •  20
  • Vandervals  · 技术社区  · 9 年前

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

    5 回复  |  直到 9 年前
        1
  •  18
  •   Supamiu    9 年前

    一个简单的谷歌搜索给我找到了你想要的答案: 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
  •  7
  •   Community    7 年前

    根据 this answer :

    // Internet Explorer 6-11
    var isIE = /*@cc_on!@*/false || !!document.documentMode;
    // Edge 20+
    var isEdge = !isIE && !!window.StyleMedia;
    
        3
  •  4
  •   Dave Voyles    9 年前

    Microsoft Edge UA字符串:

    Mozilla/5.0(Windows NT 10.0)AppleWebKit/537.36(KHTML,类似壁虎)Chrome/42.0.2311.135 Safari/537.36Edge/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,类似Gecko)Chrome/39.02171.71 Safari/537.36 Edge/12.0。 这是故意的。

    您还会注意到,整个字符串以Edge/12.0结尾,而Chrome没有这样做。

    我要指出的是,这与微软在IE 11上所做的并没有什么大的不同。正如本文所解释的,IE 11在Windows 8上的版本是:Mozilla/5.0(Windows NT 6.3;Trident/7.0;rv:11.0),就像Gecko。

    什么是用户代理嗅探?

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

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

    Here’s a great article explaining the history of the User Agent.

    通常,懒惰的开发人员只会嗅探UA字符串,并根据他们认为观众使用的浏览器禁用网站上的内容。InternetExplorer8是开发人员的常见问题,因此他们会经常检查用户是否使用任何版本的IE,并禁用功能。

    The Edge team details this even deeper on their blog.

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

    Internet Explorer 11s 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,类似壁虎)Chrome/42.0.2311.135 Safari/537.36Edge/12.10136

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

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

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

    结论

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

        4
  •  3
  •   Eli Crow    7 年前

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

    function isBrowserEdge () {
        return typeof CSS !== 'undefined' && CSS.supports("(-ms-ime-align:auto)");
    }
    
        5
  •  1
  •   Pax Terminus    9 年前

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

    虽然在市场营销人员的心目中,世界是完美的,但实际上,浏览器存在多年未修复的bug,而且情况总是如此。

    在我的案例中,需要我测试Edge与Chrome的问题是Spartan/Edge正确渲染的Chrome下拉高度错误。微软在这方面没有什么可修复的,谷歌一年多来一直忽略这个bug(它在旧版本的Chrome中正确渲染)。