firefox和ie的浏览器脚本兼容问题,ie兼容代码

  firefox和ie的浏览器脚本兼容问题,ie兼容代码

  以下IE浏览器换成IE,Mozzila Firefox换成MF。

  1.document.form.item问题

  (1)存在的问题:

  现有代码中有很多document . formname . item( itemname )等语句,无法在MF下运行。

  (2)解决方案:

  请改用document . formname . elements[ element name ]。

  (3)其他

  见2

  2.集合类对象的问题

  (1)存在的问题:

  现有代码中很多集合类对象使用(),IE可以接受,MF不行。

  (2)解决方案:

  请改用[]作为下标操作。例如,document.forms(formName )更改为document.forms[formName]。

  再比如:文档。GetElementsbyname( input name )(1)已更改为Document。GetElementsbyname(输入名称)[1]

  (3)其他

  3.窗口.事件

  (1)存在的问题:

  Window.event不能在MF上运行。

  (2)解决方案:

  MF的事件只能在事件现场使用,这个问题暂时解决不了。您可以解决这个问题:

  原始代码(可以在IE中运行):

  type= button name= some button value= submit /

  .

  脚本语言=javascript

  函数gotoSubmit() {

  .

  警报(window . event);//使用window.event

  .

  }

  /脚本

  新代码(可以在IE和MF中运行):

  type= button name= some button value= submit /

  .

  脚本语言=javascript

  函数gotoSubmit(evt) {

  evt=evt?evt : (window.event?window . event:null);

  .

  alert(evt);//使用evt

  .

  }

  /脚本

  另外,如果新代码中第一行不变,和旧代码一样(即gotoSubmit调用不给出参数),仍然只在IE中运行,但不会出现错误。所以这个方案的tpl部分还是兼容旧码的。

  4.HTML对象的id作为对象名的问题

  (1)存在的问题

  在IE中,HTML对象的ID可以直接作为document的从属对象的变量名。不在MF。

  (2)解决方案

  GetElementById(idName )用作对象变量,而不是idName。

  5.获取带有idName字符串的对象的问题

  (1)存在的问题

  在IE中使用eval(idName)可以得到带有idName的HTML对象,但在MF中不行。

  (2)解决方案

  GetElementById(idName)而不是eval(idName)。

  6.变量名与HTML对象id相同。

  (1)存在的问题

  在MF中,因为对象id不用作HTML对象的名称,所以可以使用与HTML对象id相同的变量名,但在IE中不行。

  (2)解决方案

  在声明变量的时候,所有的变量都加了var,避免歧义,这样就可以在IE中正常运行了。

  此外,最好不要使用与HTML对象id相同的变量名,以减少错误。

  (3)其他

  见问题4。

  7.event.x和event.y问题

  (1)存在的问题

  在IE中,事件对象有x,y属性,而在MF中没有。

  (2)解决方案

  在MF中,event.x的对等词是event.pageX,但它不在event.pageie中。

  因此,使用event.clientX而不是event.x.IE里面也有这个变量。

  Event.clientX与event.pageX(当整个页面都有滚动条时)略有不同,但大多数时候是等价的。

  如果完全一样,那就有点麻烦了:

  mX=event.x?event . x:event . pagex;

  然后用mX替换event.x。

  (3)其他

  Event.layerX在IE和MF中都有,具体含义是否不同尚未考证。

  8.关于框架

  (1)存在的问题

  可以使用window.testFrame在IE中获取帧,但在mf中不行。

  (2)解决方案

  mf和ie在框架使用上的主要区别是:

  如果框架标签中写入了以下属性:

  frame src= xx . htm id= frameId name= frameName /

  Ie可以通过id或名称访问这个框架对应的窗口对象。

  Mf只能通过名字访问这个框架对应的窗口对象。

  例如,如果上面的frame标记是在顶层窗口的htm中编写的,您可以像这样访问它。

  Ie: window.top.frameId或window.top.frameName来访问这个窗口对象。

  Mf:这是访问这个窗口对象的唯一方法

  此外,window . top . document . getelementbyid( framed )可用于访问mf和ie中的frame标记。

  并且可以通过window . top . document . getelementbyid( test frame )切换框架的内容。src= xx.htm

  也可以通过window . top . frame name . location= xx . htm 切换框架的内容

  框架和窗口的描述可以在bbs的‘窗口和框架’文章中找到。

  和/test/js/test_frame/目录下的测试。

  -由adun于2004年12月9日修改。

  9.在mf中,自定义属性必须通过getAttribute()获得

  10.mf中没有parentlement.children,但使用了它。

  parent node parent node . child nodes

  子节点的下标在IE和MF中有不同的含义。MF使用DOM规范,在childNodes中会插入一个空白的文本节点。

  一般来说,这个问题可以通过node.getElementsByTagName()来避免。

  当html中缺少一个节点时,IE和MF对parentNode有不同的解释,比如

  形式

  桌子

  输入/

  /表格

  /表单

  MF中input.parentNode的值是form,IE中input.parentNode的值是空节点。

  MF中的节点没有removeNode方法,因此必须使用以下方法node . parent node . remove child(node)。

  11 .常数问题

  (1)存在的问题:

  在IE中不能使用Const关键字。例如const constVar=32这是IE中的一个语法错误。

  (2)解决方案:

  不用const,用var代替。

  12.身体物体

  MF的body在body标签被浏览器完全读入之前就已经存在,而IE必须在body被完全读入之后才存在。

  13.url编码

  在js中,如果写url,就直接写,不用amp例如var url=xx.jsp?objectName=xx ampobject event=XXX ;

  Frm.action=url那么很有可能是url显示不正确,导致参数没有正确传输到服务器。

  通用服务器报告找不到错误参数。

  当然如果是在tpl中,要求写成amp,因为tpl符合xml规范。

  一般MF无法识别js中的amp

  14.节点名和标记名问题

  (1)存在的问题:

  在MF中,所有节点都有nodeName值,但textNode没有tagName值。在IE中,nodeName的使用似乎是

  有问题(具体情况没测试过,但是我IE死过几次)。

  (2)解决方案:

  使用tagName,但您应该检查它是否为空。

  15.元素属性

  lower input.type属性是只读的,但可以在MF下修改。

  16.document.getelementsbyname()和document.all[name]的问题

  (1)存在的问题:

  在IE中,getElementsByName()和document.all[name]不能用于获取div元素(是否有其他元素不能取,未知)。

firefox和ie的浏览器脚本兼容问题,ie兼容代码