我将扮演一个恶魔的拥护者片刻。我一直想知道为什么将浏览器检测(而不是功能检测)视为一种不好的做法。如果我测试某个浏览器的某个版本并确认该功能以某种可预测的方式运行,则可以决定对其进行特殊处理。这样做的理由是将来会万无一失,因为此部分浏览器版本不会更改。另一方面,如果我检测到DOM元素具有函数X,则不一定表示:
我只是窥视了jQuery源,他们通过将精心构建的HTML代码段插入DOM中来进行功能检测,然后他们检查其中是否具有某些功能。这是一种明智而可靠的方法,但是我要说的是,如果我只是在自己的小块JavaScript(没有jQuery)中做类似的事情,那将太繁重。它们还具有几乎无限的质量检查资源的优势。另一方面,您经常看到人们正在做的事情是,他们检查功能X的存在,然后基于此,他们假定该功能将在所有具有此功能的浏览器中以某种方式运行。
从功能检测不是一件好事(如果正确使用)的意义上,我没有说什么,但是我想知道为什么浏览器检测通常听起来很合逻辑,但通常会立即被取消。我不知道这是否是另一种时髦的说法。
浏览器检测一直被广泛接受。但是,Resig的注释特定于库/框架代码,即其他[特定于域的]应用程序/站点将使用 的代码。
我认为毫无疑问,特征检测非常适合库/框架。但是,对于特定于域的应用程序,我不确定浏览器检测是否很糟糕。它适用于解决难以进行功能检测的已知浏览器特征,或者适用于在实现功能本身中存在错误的浏览器。浏览器检测适当的时间:
也就是说,在进行浏览器检测时要避免一些主要的陷阱(可能是我们大多数人犯下的)。