广为使用的浏览器测试实际上是一种很不好的脚本编写方式——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/脚本编程,建议从那里起步。
不知为什么,我在firefox中无法使用 document.getElementById,说是has no properties, 诡异阿