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