【问题标题】:the best way to detect browser in js在js中检测浏览器的最佳方法
【发布时间】:2011-12-03 21:04:25
【问题描述】:

在 JavaScript 中有很多浏览器检测方法。

据我所知,使用navigator.userAgent或检测特征(如XMLHttpRequest)等等。

谁能告诉我哪种方法最好、最有效?

【问题讨论】:

标签: javascript browser-detection browser-feature-detection


【解决方案1】:

如果您真的需要知道他们使用的是什么浏览器,您主要需要查看userAgent 字符串(尽管有时您可以通过以下方式推断浏览器寻找几个不起眼的功能)。请注意,某些浏览器会让用户更改它并欺骗您。 :-)

但是检测 浏览器 已经过时了,这是有充分理由的。相反,正如您所说,您想要检测您正在寻找的功能。这更可靠,工作量也更少。例如,仅仅因为 IE 不支持addEventListener,并不意味着它永远不会支持(事实上 IE9 支持)。因此,您改为进行功能检测,这可以为代码提供面向未来的证明。

这是一个具体的例子:假设你想知道(就像我对place5 jQuery plug-in 所做的那样)浏览器是否支持placeholder attribute。您可以使用浏览器检测并维护一个列表,其中列出了哪些版本支持或不支持哪些浏览器,这很混乱,您必须不断返回等等,等等,或者你可以这样做:

if ("placeholder" in document.createElement("input")) {
    // The browser supports the attribute
}
else {
    // It doesn't
}

...你就完成了。

this page 中有一组很棒的功能测试,由 kangax 维护。还有一个名为Modernizr 的库,它可以为您进行特征检测、媒体查询等。如果你使用 jQuery,它通过jQuery.support 内置了一些特征检测。 this article 中对特征检测、媒体查询、外形检测(平板电脑、手机还是 PC?)的各个方面进行了很好的讨论。

【讨论】:

  • 正是我需要的!检测IE9及以下。
  • @T.J. Crowder - 同意选择功能检测,但如果您试图检测浏览器以解决错误怎么办?您无法测试的错误或它会挂起浏览器?
  • @T.J. Crowder - 除了我之前的问题,我需要找到浏览器 IE9 到 IE7,并且一个很好的合法方法(基于您关于特征检测的 cmets)将使用设置变量的条件 cmets(直到 IE9 才支持)。对吗?
  • @johntrepreneur:如果这是做你想做的事情的唯一方法,为什么不呢?但是请查看 kangax 的页面等。 的东西你真的无法检测到,但没有我想象的那么多...... :-)
  • 在某些情况下您必须检测浏览器。例如,我正在开发一个使用 webGL 的网站,因此我们会检测它是否可用。如果不是,我需要提供特定于浏览器的消息(特别是一组在 Safari 上启用 webGL 的指令)。
【解决方案2】:

您没有检测到浏览器。相反,您检查可用的功能。

浏览器检测可以解决(见鬼.. 几年前在gmail上使用opera时我不得不自己做),但是如果浏览器有一个功能,那么你就知道你可以使用它。

【讨论】:

  • 在某些情况下,您必须知道特定的浏览器,这样您才能提供特定浏览器的消息。
  • 好吧,就我而言,在 Safari 中启用 webGL 的说明。
  • 即检测webGL功能,如果不存在,显示浏览器特定消息(更新你的IE,这里是如何启用webGL等)
【解决方案3】:

你可以试试这个http://www.quirksmode.org/js/detect.html

但正如其他人所指出的,您应该尝试使用特征检测,但有时这还不够。例如,当某些功能运行得太差/太慢等时。

另一个很好的特征检测工具是Modernizr

【讨论】:

    【解决方案4】:

    特征检测是检测浏览器的捷径。如前所述,了解浏览器是否支持某个功能比检测浏览器更重要。 以下链接将帮助您根据浏览器支持的对象区分浏览器: http://www.javascriptkit.com/javatutors/objdetect3.shtml

    但是,如果您只是为了了解而想检测浏览器,最好使用Navigator而不是通过检查条件来检查各种功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-16
      • 2010-10-09
      • 1970-01-01
      • 2013-03-18
      • 2011-06-10
      • 1970-01-01
      • 2015-04-06
      • 2011-04-26
      相关资源
      最近更新 更多