javascript在中ie与firefox的区别与解决方案(转)

javascript在中ie与firefox的区别与解决方案

1.载入xml
ie创建对象:
    msXmlAx=new ActiveXObject("Microsoft.XMLDOM");
firefox创建对象:
     xDoc=document.implementation.createDocument("","",null);

总体方法为:
     ///判断浏览器 创建不同的对象
     function getXmlDocument()
     {
        var xDoc;
     if(document.implementation && document.implementation.createDocument)
     {
      xDoc=document.implementation.createDocument("","",null);
     }
     else if(typeof ActiveXObject !="undefined")
     {
       var msXmlAx=null;
     try{
           msXmlAx=new ActiveXObject("Microsoft.XMLDOM");  
     }
     catch(e)
     {

                    msXmlAx=new ActiveXObject ("Microsoft.XMLDOM");
     }
     xDoc=msXmlAx;
   
     }
     if(xDoc== null || typeof xDoc.load=="undefined")
     {
      xDoc=null;
   
   
     }
     return xDoc;
    
     }


2.insertRow和insertCell
在ie中可直接调用该方法 document.getElementById("xxx").insertRow();
在firefox 中需要放置参数:document.getElementById("xxx").insertRow(-1);

同样 insertRow(-1)也支持ie

3.判断浏览器类型

/*---------------------------------------------------------------
    --this function can return the actual browser name and version.--
    --USESAGE:There are Two Methods(See the end of this function) --
    --Create By Yemoo. DateTime:2006-2-3 21:53:37                 --
    ---------------------------------------------------------------*/
    function browserinfo(){
        var Browser_Name=navigator.appName;
        var Browser_Version=parseFloat(navigator.appVersion);
        var Browser_Agent=navigator.userAgent;
        
        var Actual_Version,Actual_Name;
        
        var is_IE=(Browser_Name=="Microsoft Internet Explorer");
        var is_NN=(Browser_Name=="Netscape");
        
        if(is_NN){
            //upper 5.0 need to be process,lower 5.0 return directly
            if(Browser_Version>=5.0){
                var Split_Sign=Browser_Agent.lastIndexOf("/");
                var Version=Browser_Agent.indexOf(" ",Split_Sign);
                var Bname=Browser_Agent.lastIndexOf(" ",Split_Sign);

                Actual_Version=Browser_Agent.substring(Split_Sign+1,Version);
                Actual_Name=Browser_Agent.substring(Bname+1,Split_Sign);
            }
            else{
                Actual_Version=Browser_Version;
                Actual_Name=Browser_Name;
            }
        }
        else if(is_IE){
            var Version_Start=Browser_Agent.indexOf("MSIE");
            var Version_End=Browser_Agent.indexOf(";",Version_Start);
            Actual_Version=Browser_Agent.substring(Version_Start+5,Version_End)
            Actual_Name=Browser_Name;
            
            if(Browser_Agent.indexOf("Maxthon")!=-1){
                Actual_Name+="(Maxthon)";
            }
            else if(Browser_Agent.indexOf("Opera")!=-1){
                Actual_Name="Opera";
                var tempstart=Browser_Agent.indexOf("Opera");
                var tempend=Browser_Agent.length;
                Actual_Version=Browser_Agent.substring(tempstart+6,tempend)
            }
        }
        else{
            Actual_Name="Unknown Navigator"
            Actual_Version="Unknown Version"
        }
        /*------------------------------------------------------------------------------
        --Your Can Create new properties of navigator(Acutal_Name and Actual_Version) --
        --Userage:                                                                    --
        --1,Call This Function.                                                       --
        --2,use the property Like This:navigator.Actual_Name/navigator.Actual_Version;--
        ------------------------------------------------------------------------------*/
        navigator.Actual_Name=Actual_Name;
        navigator.Actual_Version=Actual_Version;
        
        /*---------------------------------------------------------------------------
        --Or Made this a Class.                                                    --
        --Userage:                                                                 --
        --1,Create a instance of this object like this:var browser=new browserinfo;--
        --2,user this instance:browser.Version/browser.Name;                       --
        ---------------------------------------------------------------------------*/
        this.Name=Actual_Name;
        this.Version=Actual_Version;
    }
通过: navigator.Actual_Name 得到浏览器名称,navigator.Actual_Version 的到浏览器版本

4. firefox 中无法像ie一样通过documentElement得到xml文本对象的所有元素信息,可以使用替换法:
   创建XMLHttpRequest对象,通过它的responseXML返回的xml对象进行操作

5.firefox中不支持window.event
解决方法:
    document.onclick=function(e) //要兼容ff的话,这个参数一定要写上
     {
       e = window.event || e;
       e = e.srcElement || e.target;
       //其他实现代码
    }
6.firefox不支持parentElement,若要使用可写成:parentNode

7.IE中将xml通过xsl进行格式化时,使用如下代码:
   xmlDoc.transformNode(xslDoc);
   xmlDoc为xml文档
   xslDoc为xsl文档
在firefox中使用如下代码:
    var   xsltProcessor =new XSLTProcessor();  
          xsltProcessor.importStylesheet(xslDoc);
    var   resultHtml= xsltProcessor.transformToDocument(xmlDoc);
    var   oXmlSerializer = new XMLSerializer();
    $GetEle("ZfDiv_").innerHTML= oXmlSerializer.serializeToString(resultHtml);

8.ifream加载中 使iframe的高度根据所加载页的高度而改变
网上有代码为:
   <iframe onload="document.all.demo.height=document.frames['demo'].document.body.scrollHeight" src="demo.htm" />
   代码没有问题,只是在Firefox中不能实现想要的效果
   改为:
     document.getElementById('demo').height=window.frames['demo'].document.body.scrollHeight
   即可

原文地址:https://www.cnblogs.com/jacklong/p/1033937.html