浏览器版本或错误检测

时间:2009-03-02 01:59:28

标签: javascript

我最近看到了一些关于避免编码到特定浏览器的信息而是使用功能/错误检测。似乎jQuery的创建者John Resig是功能/错误检测的忠实粉丝(他有一个很好的演讲,其中包括对YUI Theater的讨论)。我很好奇人们是否发现这种方法在实践中有意义?如果当前版本的浏览器中不再存在该错误(这是IE6问题但不是7或8)会怎样?

4 个答案:

答案 0 :(得分:9)

对象检测的最大优势在于您只使用客户端浏览器可用的对象和功能。换句话说,给出以下代码:

if (document.getFoo) {
    // always put getFoo in here
} else {
    // browsers who don't support getFoo go here
}

允许您在不命名的情况下干净地分离出浏览器。这很酷的原因是因为只要浏览器支持getFoo,您就不必担心它是哪一个。这意味着您实际上可能支持您从未听说过的浏览器。如果你定位用户代理字符串找到浏览器,那么你只能支持你知道的浏览器。

此外,如果之前不支持getFoo的浏览器使用该程序并发布了新版本,那么您根本不需要更改代码以允许新浏览器利用更好的代码。

答案 1 :(得分:3)

  

如果当前版本的浏览器中不再存在该错误(这是IE6问题但不是7或8)会怎样?

这是功能/错误检测的全部要点。如果浏览器更新其功能或修复了错误,则功能/错误检测代码已经是最新的。另一方面,如果您正在进行浏览器嗅探,则每次浏览器功能发生变化时都必须更改代码。

答案 2 :(得分:1)

版本和用户代理解析让我想起了刻板印象或种族貌相。对象检测是我认为的方式。 jQuery in Action一书很好地指出了原因的细节。

答案 3 :(得分:0)

好吧,如果它是IE 6中的问题,但不是IE 7或IE 8,那么功能/错误检测机制会将其标记为没有问题并使用适当的功能。

在实践中有意义的是,浏览器嗅探会导致很多问题,如果你没有及时更新你的签名以便发布一些新的浏览器怎么办?您现在已经锁定了潜在客户和访问者,因为您认为他们的浏览器无法支持确实可以支持的内容。

所以是的,它是有道理的,你的第二个问题没有实际意义,因为它首先进行检测,如果它不再是一个bug,一切都会按预期工作,如果没有周围的解决方案到位如果那里有虫子的话!