javascript在IE和Firefox中的兼容考虑
canca
2007-07-01 13:31
2
0
1.document.formName.item("itemName") 问题
统一使用document.formName.elements["elementName"].
2.集合类对象问题
统一使用[]获取集合类对象.
3.自定义属性问题
统一通过getAttribute()获取自定义属性.
4.eval("idName")问题
统一用getElementById("idName")来取得id为idName的HTML对象.
5.变量名与某HTML对象ID相同的问题
使用document.getElementById("idName")代替document.idName.最好不要取HTML对象ID相同的变量名,以减少错误;在声明变量时,一律加上var,以避免歧义.
6.const问题
统一使用var关键字来定义常量.
7.input.type属性问题
8.window.event问题
9.event.x与event.y问题
使用mX(mX = event.x ? event.x : event.pageX;)来代替IE下的event.x或者Firefox下的event.pageX.
10.event.srcElement问题
使用obj(obj = event.srcElement ? event.srcElement : event.target;)来代替IE下的event.srcElement或者Firefox下的event.target.
11.window.location.href问题
使用window.location来代替window.location.href.
12.模态和非模态窗口问题
直接使用window.open(pageURL,name,parameters)方式打开新窗口。
13.frame问题
在IE和Firefox中都可以使用window.document.getElementById("frameId")来访问这个frame对象.
14.body问题

程序代码
<body>
<script type="text/javascript">
document.body.onclick = function(evt){
evt = evt || window.event;
alert(evt);
}
</script>
</body>

程序代码
<body>
</body>
<script type="text/javascript">
document.body.onclick = function(evt){
evt = evt || window.event;
alert(evt);
}
</script>
15. nodeName 和 tagName 问题
问题:在MF,IE中,所有节点均有 nodeName 值,但 textNode 没有 tagName 值。
解决方法:使用 tagName,但应检测其是否为undefined。
16. url encoding
问题:js中如果书写url就直接写&不要写&例如var url = 'xx.jsp?objectName=xx&objectEvent=xxx';
frm.action = url那么很有可能url不会被正常显示以至于参数没有正确的传到服务器,一般会服务器报错参数没有找到;当然如果是在tpl中例外,因为tpl中符合xml规范,要求&书写为&
一般MF无法识别js中的&
17.children 与 childNodes,removeNode
问题一:在MF中没有 parentElement parement.children 而用 parentNode parentNode.childNodes
问题二:childNodes的下标的含义在IE和MF中不同,MF使用DOM规范,childNodes中会插入空白文本节点。
问题三:一般可以通过node.getElementsByTagName()来回避这个问题。当html中节点缺失时,IE和MF对parentNode的解释不同,例如
<form>
<table>
<input/>
</table>
</form>
MF中input.parentNode的值为form, 而IE中input.parentNode的值为空节点
问题四:MF中节点没有removeNode方法,必须使用如下方法 node.parentNode.removeChild(node)
原文地址:http://yoker.sc0826.com/trackback.asp?tbID=232
发表评论