1

我发现一篇文章解释了如何“通过检查是否存在非标准 document.all 仅在 IE 中可用的对象”来检测 IE。

这种方法会被认为是好的做法吗?它是否稳定且真正面向未来?

这是文章:http ://tanalin.com/en/articles/ie-version-js/

另外,不要忘记未来打样部分: http: //tanalin.com/en/articles/ie-version-js/#h-future-proof

这是建议的代码:

if (document.all && !document.querySelector) { // IE7 or lower

}
4

4 回答 4

4

这种方法会被认为是好的做法吗?

它是否稳定且真正面向未来?

一般来说,浏览器检测并不是一个好的做法。

在那些情况下,它是解决问题的最佳方案,并且您需要检测的浏览器是 IE 的版本,那么条件注释就是要走的路。

于 2012-10-16T15:36:20.530 回答
2

我和@Quentin 在一起,特别是如果你在 JS 中不是真的“在家” 。我并不是说这有什么不好,但在极少数情况下,你可以使用完整的浏览器检测脚本,但除非你能完全理解代码,否则我建议你不要使用它。

有一篇关于quirksmode的好文章很好地解释了原因。
同样在 quirksmode 上,您可以找到完整的浏览器检测脚本。但正如我所说:除非您可以诚实地说您完全理解代码,否则我建议您暂时保留它......

于 2012-10-16T15:45:42.793 回答
1

浏览器检测是一个谬误。

您应该关注的是“特征检测”,它是一种鸭式类型

换句话说,您对用户是否正在运行特定的浏览器版本不太感兴趣,而对他们正在运行的浏览器(无论品牌或版本)是否支持您想要使用的功能更感兴趣。

这样做的好处是除了升级浏览器之外,还有很多方法可以添加功能。像Modernizr这样的库通过 JavaScript 实现添加了“缺失”的功能。浏览器检测会错过这一点。

浏览器检测的“优势”是它是许多单个特征检测代码的简写。然而,这可能是一种虚假的经济。

通常,请执行以下操作之一:

  1. 如果您正在编写库,请明确说明您希望测试的每个功能。
  2. 如果您不编写库,请使用库。
于 2012-10-16T15:40:58.567 回答
0

直接检测新功能总是更好。这篇文章仅是关于检测版本(比当前稳定版本更旧)的 IE,以防直接检测功能/错误是不可能的,或者考虑到除旧 IE 之外的所有浏览器都支持很久以前的功能,这将是矫枉过正。

于 2012-10-17T14:53:29.527 回答