2009-03-02 114 views
1

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

回答

9

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

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

允许您清除浏览器而不命名名称。这很酷的原因是因为只要浏览器支持getFoo你不必担心它是哪一个。这意味着您可能实际上支持您从未听说过的浏览器。如果您的目标用户代理字符串找到浏览器,那么您只能支持您认识的浏览器。

此外,如果之前不支持getFoo的浏览器获取该程序并发布新版本,则无需更改代码,以允许新浏览器利用更好的代码。

0

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

它在实践中很有意义,浏览器嗅探会导致很多问题,如果您没有及时更新某个发布的新浏览器的签名,该怎么办?您现在锁定了潜在客户和访问者,因为您认为他们的浏览器无法支持其确实可以实现的功能。

所以是的,它是有道理的,你的第二个问题是没有意义的,因为它首先做了检测,如果它不再是一个bug,那么一切都将按预期工作,没有解决的工作如果错误在那里,请放置!

1

版本和用户代理解析使我想起了刻板印象或种族分析。在我看来,物体检测是一种方法。 “jQuery in Action”一书很好地指出了原因的细节。

+0

有趣的隐喻 – alex 2009-03-02 02:30:36

3

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

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