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元素(是否有其他元素不能取,未知)。