我要做一下反对者的角色。我一直在想,为什么浏览器检测(与特性检测不同)被认为是一种绝对的坏习惯。如果我测试某个特定版本的浏览器,并确认,某些功能表现出一些可预测的方式,那么似乎决定特殊处理它是可以接受的。理由是这样做将来是不会出问题的,因为这个部分的浏览器版本不会改变。另一方面,如果我检测到 DOM 元素具有函数 X,这并不一定意味着:
- 这个函数在所有浏览器中都以相同的方式工作,并且
- 更重要的是,即使在所有未来的浏览器中也会以相同的方式工作。
我刚刚查看了 jQuery 的源代码,他们通过将精心构造的 HTML 片段插入 DOM 中进行特性检测,然后检查是否具有某些特性。这是一个明智而可靠的方法,但我想说,如果我在我的小型个人 JavaScript 中只是做类似的事情(没有使用 jQuery),那么这可能会有点过于繁重。他们也拥有几乎无限的 QA 资源的优势。另一方面,你经常看到人们检查函数 X 的存在,然后基于此,他们假设具有该函数的所有浏览器都会以某种方式运行该函数。
我并不是说特性检测不好(如果使用正确),但我想知道为什么浏览器检测通常被立即驳回,即使听起来很合理。我想知道这是否又是一个时髦的说法。