• IE、Firefox、Chrome 的JS代码兼容注意事项


    IE、Firefox、Chrome 的JS代码兼容注意事项

    jangogo @ 2009-6-26 12:03:00 近日,公司的4Fang 四方四方在线软件产品由于用户原来越多并广受好评,公司决定由原来只支持IE,扩展到支持Firefox 和 Chrome,随身版更决定使用Chrome作为客户端,在代码兼容性升级的时候,碰到一些问题,姑且记录下来,供同事和朋友们参考。

    1.  IE 的XMLHTTP 如果申请一个非XML格式的文件,XMLHttpObject.responseXML 是一个可用的对象。
         Firefox 和 Chrome 则会返回null
         IE我们可以直接 XMLHttpObject.responseXML.loadXML, Firefox 和 Chrome 要通过其他方法
     
    1. var xX=getXMLHttpObj();   
    2. var text = xX.responseText.replaceAll('&','&');   
    3.             var xD=xX.responseXML;   
    4.             if(xD){   
    5.               xD.loadXML(text);   
    6.             }else{   
    7.               var oParser = new DOMParser();   
    8.               xD= oParser.parseFromString(text,"text/xml");   
    9.               //alert(xD.getElementsByTagName("a"));   
    10.             }   
    2. 还是XMLHttpObject , IE 和 Chrome 可以 支持 XMLHttpObject.send() 方法里面没有任何参数,Firefox 必须要求最少都要一个参数,即使参数值为null ,即:
     
    1. //要兼容多种浏览器,必须这样写,参数null不能省略:   
    2. XMLHttpObject.send(null);  
    3.Firefox 里面 HTMLElementObject.outerHTML 属性无效,IE和Chrome 就很正常,例如我们要删除一个DIV:
     
    1. // 这一句在IE和Chrome 运行很好   
    2.     $("DIV").outerHTML="";  //删除一个DIV   
    3. //firefox 不能则通过上面的语句实现,只能通过以下方法实现    
    4. $("DIV").parentNode.removeChild($("DIV"));   
    5. delete $("DIV"+n);  
    4. Firfox 不支持直接用HTMLElementObject 的id 取得该元素,IE和Chrome 则支持得很好。
        Firfox死板的坚持“标准”?!
        例如我们页面上有这样一段HTML代码:
     
    1. <div id="DivObj">this is some text</div>  
         IE和Chrome 可以直接用DivObj 就可以引用这个元素对象。
         Firfox 就在只能用 getElementById('DivObj') 或者著名的$('DivObj')函数了

    5. javascript 操作styleSheet对象和rules对象,兼容的写法如下:    
     
    1. var Rules=document.getElementById("xwincss").sheet||document.styleSheets["xwincss"];   
    2. if(Rules.rules){   
    3.   //IE   
    4.    Rules=Rules.rules;   
    5. }else{   
    6.   //firefox   
    7.    Rules=Rules.cssRules;   
    8. }    
    6、firefox和ie事件event处理
    在ie中,事件对象是作为一个全局变量来保存和维护的。 所有的浏览器事件,不管是用户触发
    的,还是其他事件, 都会更新window.event 对象。 所以在代码中,只要轻松调用 window.event
    就可以轻松获取 事件对象, 再 event.srcElement 就可以取得触发事件的元素进行进一步处理
    在ff中, 事件对象却不是全局对象,一般情况下,是现场发生,现场使用,ff把事件对象自动传
    递给对应的事件处理函数。 在代码中,函数的第一个参数就是ff下的事件对象了。 
     
    1. //<button id="btn4" onclick="foo4()">按钮4</button>    
    2. function foo4(){    
    3. var evt=getEvent();    
    4. var element=evt.srcElement || evt.target ;    
    5. alert(element.id)    
    6. }    
    7. function getEvent()    
    8. //同时兼容ie和ff的写法    
    9. if(document.all) return window.event;    
    10. func=getEvent.caller;    
    11. while(func!=null){    
    12. var arg0=func.arguments[0];    
    13. if(arg0){    
    14. if((arg0.constructor==Event || arg0.constructor ==MouseEvent) || (typeof(arg0)=="object" && arg0.preventDefault && arg0.stopPropagation)){    
    15. return arg0;    
    16. }    
    17. }    
    18. func=func.caller;    
    19. }    
    20. return null;    
    21. }    

    7、firefox和ie对手型指针cursor不兼容
    手型指针有cursor:hand和cursor:pointer两种写法,其中cursor:hand在ff中不支持,返回错误!
    只要使用cursor:pointer即可,ff和ie都支持! 
  • 相关阅读:
    ERROR 1045 (28000): Access denied for user 'xxx'@'localhost' (using password: YES)
    --skip-grant-tables命令
    mysql之mysql_config_editor
    Mysql8报错:ERROR 1227 (42000): Access denied; you need (at least one of) the SYSTEM_USER privilege(s) for this operation
    创建仅有查询指定表权限的用户
    centos7修改分辨率
    CreateProcess简单示例
    光标在Edit控件中的位置
    设计模式:原型模式(C++)【克隆羊多莉】
    设计模式2:策略模式工厂
  • 原文地址:https://www.cnblogs.com/aaa6818162/p/1643575.html
Copyright © 2020-2023  润新知