Browser Test VS. Object Detection

广为使用的浏览器测试实际上是一种很不好的脚本编写方式——Peter-Paul Koch 告诉我们

所谓“浏览器测试”,是指在 JavaScript 脚本中通过 navigator.userAgent 来判断当前用户使用的是什么浏览器,并根据这个浏览器能够支持的情况提供相应的功能。乍一看似乎没有什么不妥,但 Peter 给出了为什么永远不要使用浏览器测试的原因:

1. 它很有可能忽略了你没有注意到的浏览器,比如新出现的,或者特别罕见的。
2. userAgent 这个属性在浏览器里多数是可以修改的,用户可能会把它定制为一些其他的。
3. 有些浏览器,只有在特定平台下支持某种属性,或者只在特定平台下不支持,这些情况浏览器测试都不好用。

那么检测 JavaScript 的版本如何呢?也不行,因为许多浏览器对同一个版本的支持是不一致的,比如 Netscape 4 和 IE 4 都声称支持 JavaScript 1.2,但你真的相信他们支持的是同一个 1.2 么?

对象检测才是正确的方法。要知道一个浏览器是否支持 document.images 对象,只需要:if (document.images) 即可。而要知道 window 对象是否支持 focus() 函数,if (window.focus) 就可以判断了,但千万不要写成 if (window.focus()) 哦,那可是调用那个函数了。

Peter 还给出了其他的一些判断规则。

* 如何判断是否支持 DHTML?if (document.getElementById || document.all || document.layers)
* 如何判断是否支持 W3C DOM?if (document.getElementById && document.createElement)

另外,Peter 的网站 QuirksMode.org 实在是一个学习 JavaScript 和 DOM 的绝佳站点,如果你希望学习 DOM/脚本编程,建议从那里起步。

Author: Jiang Jiang

A software engineer from China, working on some OS for a fruit company. Interested in typography and science fiction.

One thought on “Browser Test VS. Object Detection”

Leave a Reply

Your email address will not be published. Required fields are marked *