Firefox完全兼容Javascript脚本方法


  本文标签:Firefox Javascript

  在Web开发设计中,我们经常能遇到各种浏览器之间的兼容性问题,其中IE与Firefox之间是最常见的,比如在IE中,XmlHttp.send(content)方法的content可以为空,而firefox则不能为空,应该用send(" "),否则会出现411错误  。下面就介绍了让Firefox全面兼容Javascript的几种方法,仅供参考  。

  51CTO推荐阅读:Javascript解决常见浏览器兼容问题

  1.window.event兼容脚本

  1. function getEvent(){ //获取浏览器事件,同时兼容ie和ff的写法   
  2.       if(document.all) return window.event;   
  3.          func=getEvent.caller;   
  4.          while(func!=null){   
  5.          var arg0=func.arguments[0];   
  6.          if(arg0){   
  7.              if((arg0.constructor==Event  arg0.constructor ==MouseEvent)   
  8.              (typeof(arg0)=="object" && arg0.preventDefault && arg0.stopPropagation)){   
  9.       return arg0;   
  10.                 }   
  11.          }   
  12.      funcfunc=func.caller;   
  13.      }   
  14.      return null;   
  15. }  

  

  每次用事件之前Firefox都需要用getEvent()获取一下,否则就是空

  2.屏蔽Form提交事件

  1. event.returnValue=false;// for IE   
  2. evt.preventDefault();//for firefox  

  3.获取事件源

  1. var source=event.srcElement //IE   
  2. var source=event.target //firefox  

  4.添加事件兼容写法

  1. function addEvent(oElement,sEvent,func){   
  2.     if (oElement.attachEvent){   
  3.        oElement.attachEvent(sEvent,func);   
  4.     }   
  5.     else{   
  6.        sEventsEvent=sEvent.substring(2,sEvent.length);   
  7.        oElement.addEventListener(sEvent,func,false);   
  8.     }   
  9. }  

  

  用法:addEvent(window,"onload",Start);

  5.Firefox注册innerText写法

  1. //注册firefox innerText   
  2. HTMLElement.prototype.__defineGetter__("innerText",   
  3.    function(){   
  4.       var anyString = "";   
  5.       var childS = this.childNodes;   
  6.    for(var i=0; i if(childS[i].nodeType==1)   
  7.       anyString += childS[i].tagName=="BR" ? \n : childS[i].innerText;   
  8.    else if(childS[i].nodeType==3)   
  9.       anyString += childS[i].nodeValue;   
  10.    }   
  11.    return anyString;   
  12. }   
  13. );   
  14. HTMLElement.prototype.__defineSetter__("innerText",   
  15.    function(sText){   
  16.    this.textContent=sText;   
  17. }   
  18. );  

  6.长度:FireFox长度必须加“px”,IE无所谓

  7.父控件下的子控件:IE是“children”,FireFox是“childNodes”

  8.XmlHttp

  在IE中,XmlHttp.send(content)方法的content可以为空,而firefox则不能为空,应该用send(" "),否则会出现411错误  。