【发布时间】:2010-11-20 15:26:36
【问题描述】:
我将暂时扮演魔鬼的拥护者。我一直想知道为什么浏览器检测(而不是特征检测)被认为是一种糟糕的做法。如果我测试某个浏览器的某个版本并确认,某些功能的行为是某种可预测的方式,那么决定做特殊情况似乎是可以的。理由是它将来会万无一失,因为这个部分浏览器版本不会改变。另一方面,如果我检测到一个 DOM 元素有一个函数 X,这并不一定意味着:
- 此功能在所有浏览器中的工作方式都相同,并且
- 更重要的是,即使在未来的所有浏览器中,它也将以相同的方式工作。
我刚刚查看了 jQuery 源代码,他们通过将精心构造的 HTML 的 sn-p 插入 DOM 来进行特征检测,然后检查它的某些特征。这是一种明智而可靠的方式,但我会说,如果我只是在我的一小段个人 JavaScript(没有 jQuery)中做这样的事情,它会有点太重了。它们还具有几乎无限的 QA 资源的优势。另一方面,你经常看到人们做的是他们检查函数 X 的存在,然后基于此,他们假设该函数在所有具有该函数的浏览器中都会以某种方式运行。
我并不是说特征检测不是一件好事(如果使用得当的话),但我想知道为什么即使听起来合乎逻辑,浏览器检测通常也会立即被忽略。我想知道这是否是另一种流行的说法。
【问题讨论】:
-
为什么我们称之为浏览器检测?几乎所有其他浏览器,包括 Internet Explorer 都只想称自己为 Mozilla?
标签: javascript html dom cross-browser