浏览器检测与特征检测
我要扮演魔鬼的提倡者一会儿。我一直在想,为什么浏览器检测(相对于特征检测)被认为是一种糟糕的做法。如果我测试某个浏览器的某个版本并确认,某些功能的行为是以某种可预测的方式进行的,那么决定在特殊情况下执行该功能似乎还可以。其理由是,它将在未来万无一失,因为这个部分浏览器版本不会改变。另一方面,如果我检测到DOM元素具有函数X,这并不一定意味着:
- 此函数在所有浏览器中的工作方式相同,并且
- 更重要的是,即使在未来的浏览器中,它也将以同样的方式工作。
我只是查看了jQuery源代码,他们通过在DOM中插入一个精心构造的HTML片段来进行特性检测,然后检查它是否具有某些特性。这是一种明智而可靠的方法,但我想说,如果我只是在我的个人JavaScript(没有jQuery)中做这样的事情,那就太重了。它们还具有几乎无限QA资源的优势。另一方面,你经常看到人们做的是检查函数X的存在,然后在此基础上,假设函数在所有此功能的浏览器中都有一定的行为方式。
我并不是说特征检测不是一件好事(如果正确使用的话),但我想知道为什么浏览器检测通常会立即被拒绝,即使这听起来合乎逻辑。我不知道这是不是另一种时髦的说法。