浏览器检测与特征检测

浏览器检测与特征检测

我要扮演魔鬼的提倡者一会儿。我一直在想,为什么浏览器检测(相对于特征检测)被认为是一种糟糕的做法。如果我测试某个浏览器的某个版本并确认,某些功能的行为是以某种可预测的方式进行的,那么决定在特殊情况下执行该功能似乎还可以。其理由是,它将在未来万无一失,因为这个部分浏览器版本不会改变。另一方面,如果我检测到DOM元素具有函数X,这并不一定意味着:

  1. 此函数在所有浏览器中的工作方式相同,并且
  2. 更重要的是,即使在未来的浏览器中,它也将以同样的方式工作。

我只是查看了jQuery源代码,他们通过在DOM中插入一个精心构造的HTML片段来进行特性检测,然后检查它是否具有某些特性。这是一种明智而可靠的方法,但我想说,如果我只是在我的个人JavaScript(没有jQuery)中做这样的事情,那就太重了。它们还具有几乎无限QA资源的优势。另一方面,你经常看到人们做的是检查函数X的存在,然后在此基础上,假设函数在所有此功能的浏览器中都有一定的行为方式。

我并不是说特征检测不是一件好事(如果正确使用的话),但我想知道为什么浏览器检测通常会立即被拒绝,即使这听起来合乎逻辑。我不知道这是不是另一种时髦的说法。


慕容708150
浏览 605回答 3
3回答

慕慕森

这是一篇好文章解释为什么特征检测在许多浏览器嗅探方式上都是优越的。事实上,嗅探是非常脆弱的。它在理论上是脆弱的,因为它依赖于任意 userAgent字符串,然后实际将该字符串映射到特定的行为。正如时间所显示的,它在实践中也是脆弱的。测试几十个浏览器的每一个主要和次要版本,并试图解析其中一些版本的构建数都是不实际的;另一方面,测试某些行为是否有怪癖,则要健壮得多。例如,特性测试常常捕捉到浏览器供应商之间顺便复制的bug和不一致之处。根据我自己在IE8中修复ProtoType.js的经验,我知道如果我们一开始就没有发现问题,那么90%的问题是可以避免的。在修复Prototype.js时,我发现一些需要测试的特性实际上在JS库中非常常见,所以我收集了一些共同特征测试任何愿意摆脱嗅探的人。
打开App,查看更多内容
随时随地看视频慕课网APP