Firefox和IE的javascript兼容性差异

1. 对象问题 1.1 Form对象

现有问题:现有代码这获得form对象通过document.forms("formName"),这样使用在IE 能接受,MF 不能。解决方法:改用 作为下标运算。改为document.forms["formName"] 备注上述的改用 作为下标运算中的formName是id而name

1.2 HTML对象 现有问题:在 IE 中,HTML 对象的 ID 可以作为 document 的下属对象变量名直接使用。在 MF 中不能。 document.all("itemName")或者document.all("itemId") 解决方法:使用对象ID作为对象变量名 document.getElementById("itemId") 备注 document.all是IE自定义的方法,所以请大家尽量不使用。还有一种方式,在IE和MF都可以使用 var f = document.forms["formName "]; var o = f. itemId;

1.3 DIV对象

现有问题:在 IE 中,DIV对象可以使用ID作为对象变量名直接使用。在 MF 中不能。 DivId.style.display = "none" 解决方法: document.getElementById("DivId").style.display = "none" 备注获得对象的方法不管是不是DIV对象,都使用getElementById方法。参见1.2

1.4 关于frame 现有问题在 IE中 可以用window.testFrame取得该frame,mf中不行解决方法在frame的使用方面MF和IE的最主要的区别是:如果在frame标签中书写了以下属性:

那么IE可以通过id或者name访问这个frame对应的window对象而mf只可以通过name来访问这个frame对应的window对象例如如果上述frame标签写在最上层的window里面的htm里面,那么可以这样访问 IE: window.top.frameId或者window.top.frameName来访问这个window对象 MF:只能这样window.top.frameName来访问这个window对象另外,在mf和ie中都可以使用window.top.document.getElementById("frameId")来访问frame标签并且可以通过window.top.document.getElementById("testFrame").src = 'xx.htm'来切换frame的内容也都可以通过window.top.frameName.location = 'xx.htm'来切换frame的内容

1.5 窗口

现有问题 IE中可以通过showModalDialog和showModelessDialog打开模态和非模态窗口,但是MF不支持。解决办法直接使用window.open(pageURL,name,parameters)方式打开新窗口。如果需要传递参数,可以使用frame或者iframe。

2. 总结 2.1 在JS中定义各种对象变量名时,尽量使用id,避免使用name。 在 IE 中,HTML 对象的 ID 可以作为 document 的下属对象变量名直接使用。在 MF 中不能,所以在平常使用时请尽量使用id,避免只使用name,而不使用id。

2.2 变量名与某 HTML 对象 id 相同的问题 现有问题在 MF 中,因为对象 id 不作为 HTML 对象的名称,所以可以使用与 HTML 对象 id 相同的变量名,IE 中不能。解决方法在声明变量时,一律加上 var ,以避免歧义,这样在 IE 中亦可正常运行。此外,最好不要取与 HTML 对象 id 相同的变量名,以减少错误。

1. document.all Firefox可以兼容document.all, 但会生成一条警告。可以用getElementById("*") 或者 getElementByTagName("*)来代替不过对于document.all.length等属性,则完全不兼容。 2. parentElement 这个也不兼容。比方说, obj.parentElement.name 则应改成

 obj.parentNode.attributes.getNamedItem("name").nodeValue 

(不知道如何写得更简洁些) 3. event W3C不支持windows.event 比方说: 在IE里面  

判断浏览器navigator.appName == "Microsoft Internet Explorer" navigator.userAgent.indexOf("MSIE")>0 firefox不支持 window.close() innerText textContent firefox只有在window.open()的情况下支持window.close();但如果这个页是iframe也不行,建议用top.close. children不支持,支持childNodes firefox读xml也要注意IE里面01234子节点,firefox里面就变成13579了

 IE

var opname=c.childNodes[0].text;

var opid=c.childNodes[1].text;

var opurl=c.childNodes[2].text;

var opuser=c.childNodes[3].text;

var opadress=c.childNodes[4].text

FF

var opname=c.childNodes[1].textContent;

var opid=c.childNodes[3].textContent;

var opurl=c.childNodes[5].textContent;

var opuser=c.childNodes[7].textContent;

var opadress=c.childNodes[9].textContent;

但是firefox还是支持chindNodes的

在firefox中,自己定义的属性必须getAttribute()取得但是千万注意,getAttribute()取得的值是不会变的,比如 var a=b.getAttribute("属性") b.属性=100 var c=b.getAttribute("属性") 不管b.属性改成多少,a和c是相等的。建议操作方式全局变量 fag=0; if(fag==0) fag=b.属性=b.getAttribute("属性");

firefox不能写function a.b()    {} 要写成a.b=function(){}

firefox不支持src="file:///c:a.gif";

xmlHttp.setRequestHeader firefox里面一定要大写

ff的ajax,IE里面可以有很多写法,但ff里面有时就会出错,下面写一种不会出错的写法

function GetDataFromServer( url, id )

{

    if(window.XMLHttpRequest)

    { request = new XMLHttpRequest();}

    else 

    if(window.ActiveXObject)

    { request = new ActiveXObject("MSXML2.XMLHTTP.5.0");}

    var serverUrl = url ;

   

    if( request )

    {

     window.status = "数据更新中...." ;

    

     request.open("get",serverUrl,true) ;

     request.setRequestHeader("content-type","application/x-www-form-



urlencoded") ;

     request.onreadystatechange = function(){onResponse(id);};

     request.send(null) ;

   

    

    }

}

   function onResponse(id)

   {

    var xmlHttp=request;

    if(xmlHttp.readyState == 4)

    {

     if(xmlHttp.status == 200)

     {           

      var result = xmlHttp.responseText ;

      if(document.getElementById("load_"+id))

      {

       逻辑;

      }

      window.status = "数据更新完成" ;

     }

    }

   }

同时支持IE和Firefox的日期控件---DatePicker

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值