`
realbeyond
  • 浏览: 1119 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

对象检测(object detection)

阅读更多
<p>测试一个对象——比如document.all——是否存在,最安全的方法就是判断它是否返回字符串"undefined"。这个技巧就叫做对象检测(object detection)。</p>
   <p>在当今世界里,我们似乎真的无法摆脱Microsoft的影子。无论是window操作系统还是ie浏览器,我们都不得不优先使用它;就算ie6的问题多多,我们都必须把它摆到第一位。国外虽然已经提前给ie6送上了葬礼,连它的老东家微软也宣布了它的死刑;但面对国内依然50%以上占有率,前途似乎依然渺茫。</p>
   <p>我很久以前就开始使用Firefox浏览器,Firebug插件让我的工作轻松了很多。</p>
   <p>
IE6对web标准的支持缺乏已经是公认的事实。CSS一大把bugs和hacks,对Javascript也是特立独行地使用了一些自己专有的对象。比如W3C使用
addEventListener,而ie却使用attachEvent;W3C使用stopPropagation,而ie却使用cancelBubble,等等...</p>
   <p>由于ie的市场占用率实在惊人,所以我们这些做前端的,满足web标准的同时,也不得不照顾一下ie。为了兼容ie,我们只有多增加几行代码。只需使用if-else语句便可以兼容ie。</p>

       <pre name='code' class='js'>function attachEventListener(target, eventType, functionRef, capture)
{
    if (typeof target.addEventListener != "undefined")
    {
        target.addEventListener(eventType, functionRef, capture);
    }
    else if (typeof target.attachEvent != "undefined")
    {
        target.attachEvent("on" + eventType, functionRef);
    }
   
};</pre>
       <p>W3C使用addEventListener,当我们使用的是firefox浏览器,那它将执行if语句,因为它定义了addEventListener,所以将执行:</p>
   <pre name='code' class='js'>target.addEventListener(eventType, functionRef, capture);</pre>
       <p>如果当前使用的是ie浏览器,由于它没有定义addEventListener,即此时addEventListener返回的类型等于undefined,所以便执行else if语句,微软定义了另外一个作用等同于addEventListener的,即attachEvent:</p>
       <pre name='code' class='js'>target.attachEvent("on" + eventType, functionRef);</pre>
       <p>这就是经常使用的技巧:对象检测(object detection)</p>
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics