【问题标题】:Is this a clean and good way to detect versions of IE?这是检测 IE 版本的干净且好方法吗?
【发布时间】:2012-10-06 18:22:38
【问题描述】:

我发现一篇文章解释了如何“通过检查是否存在非标准 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

}

【问题讨论】:

标签: javascript


【解决方案1】:

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

没有

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

没有

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

如果它是解决问题的最佳方案,而您需要检测的浏览器是 IE 的版本,那么Conditional Comments 是最好的选择。

【讨论】:

  • +1 表示“浏览器检测不是好的做法”。使用feature detection 更好。
【解决方案2】:

浏览器检测是个谬误。

你应该关注的是“特征检测”,它是duck-typing的一种形式。

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

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

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

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

  1. 如果您正在编写库,请明确说明您希望测试的每个功能。
  2. 如果您不编写库,请使用库。

【讨论】:

  • 我同意你说的一切,除了一件事:如果你不写库,就使用库。我会说:无论如何都不要使用图书馆,要知道利弊。人们经常使用库,认为它更快更可靠,实际上不需要包含大量代码。多写两行可以就够了
  • @EliasVanOotegem 是的,我认为你是重点。但是,我想说,除非您知道库是不必要的,否则最好使用一个库,而不是花费时间和精力来调试库已经涵盖的所有极端情况。
  • 绝对!不需要重新发明轮子,更不用说每天了 :)... 我只是对 jQuery 被视为 JavaScript 的 superset 感到恼火。天知道你每天在这里看到多少问题:“你如何在 jQuery 中用 JavaScript 编写这个”解决方案可以用 JavaScript 或 jQuery 编写。我忍不住建议有时人们应该花时间看看 JS 到底是什么。他们最终可能会更好地了解他们一直使用的库,并且他们可能会更有效地使用它们。
【解决方案3】:

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

quirksmode 上有一篇很好的文章很好地解释了原因。
在 quirksmode 上,您还可以找到 full browser detection script。但正如我所说:除非你可以诚实地说你完全理解代码,否则我建议你暂时不要这样做......

【讨论】:

    【解决方案4】:

    直接检测功能总是更好。这篇文章是关于检测(比当前稳定版本更旧)版本的 IE,以防直接检测功能/错误是不可能的,或者考虑到所有浏览器都会过大杀伤力除了旧的 IE 很久以前就支持该功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-15
      • 1970-01-01
      • 1970-01-01
      • 2011-12-28
      • 1970-01-01
      相关资源
      最近更新 更多