【发布时间】:2011-12-03 21:04:25
【问题描述】:
在 JavaScript 中有很多浏览器检测方法。
据我所知,使用navigator.userAgent或检测特征(如XMLHttpRequest)等等。
谁能告诉我哪种方法最好、最有效?
【问题讨论】:
-
检测特征使用modernizr.com
标签: javascript browser-detection browser-feature-detection
在 JavaScript 中有很多浏览器检测方法。
据我所知,使用navigator.userAgent或检测特征(如XMLHttpRequest)等等。
谁能告诉我哪种方法最好、最有效?
【问题讨论】:
标签: javascript browser-detection browser-feature-detection
如果您真的需要知道他们使用的是什么浏览器,您主要需要查看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?)的各个方面进行了很好的讨论。
【讨论】:
您没有检测到浏览器。相反,您检查可用的功能。
浏览器检测可以解决(见鬼.. 几年前在gmail上使用opera时我不得不自己做),但是如果浏览器有一个功能,那么你就知道你可以使用它。
【讨论】:
你可以试试这个http://www.quirksmode.org/js/detect.html
但正如其他人所指出的,您应该尝试使用特征检测,但有时这还不够。例如,当某些功能运行得太差/太慢等时。
另一个很好的特征检测工具是Modernizr
【讨论】:
特征检测是检测浏览器的捷径。如前所述,了解浏览器是否支持某个功能比检测浏览器更重要。 以下链接将帮助您根据浏览器支持的对象区分浏览器: http://www.javascriptkit.com/javatutors/objdetect3.shtml
但是,如果您只是为了了解而想检测浏览器,最好使用Navigator而不是通过检查条件来检查各种功能。
【讨论】: