1. document.form.item 问题
问题:
代码中存在
document.formname.item("itemname")
这样的语句,不能在ff下运行
解决方法:
改用
document.formname.elements["elementname"]
2. 集合类对象问题
问题:
代码中许多集合类对象取用时使用(),ie能接受,ff不能
解决方法:
改用 [] 作为下标运算,例:
document.getelementsbyname("inputname")(1) 改为 document.getelementsbyname("inputname")[1]
3. window.event
问题:
使用 window.event 无法在ff上运行
解决方法:
ff的 event 只能在事件发生的现场使用,此问题暂无法解决。可以把 event 传到函数里变通解决:
onmousemove = "functionname(event)"
function functionname (e) {
e = e || window.event;
......
}
4. html对象的 id 作为对象名的问题
问题:
在ie中,html对象的 id 可以作为 document 的下属对象变量名直接使用,在ff中不能
解决方法:
使用对象变量时全部用标准的 getelementbyid("idname")
5. 用 idname 字符串取得对象的问题
问题:
在ie中,利用 eval("idname") 可以取得 id 为 idname 的html对象,在ff中不能
解决方法:
用 getelementbyid("idname") 代替 eval("idname")
6. 变量名与某html对象 id 相同的问题
问题:
在ff中,因为对象 id 不作为html对象的名称,所以可以使用与html对象 id 相同的变量名,ie中不能
解决方法:
在声明变量时,一律加上 var ,以避免歧义,这样在ie中亦可正常运行
最好不要取与html对象 id 相同的变量名,以减少错误
7. event.x 与 event.y 问题
问题:
在ie中,event 对象有x,y属性,ff中没有
解决方法:
在ff中,与 event.x 等效的是 event.pagex ,但event.pagex ie中没有
故采用 event.clientx 代替 event.x ,在ie中也有这个变量
event.clientx 与 event.pagex 有微妙的差别,就是滚动条
要完全一样,可以这样:
mx = event.x ? event.x : event.pagex;
然后用 mx 代替 event.x
8. 关于frame
问题:
在ie中可以用 window.testframe 取得该frame,ff中不行
解决方法:
window.top.document.getelementbyid("testframe").src = 'xx.htm'
window.top.framename.location = 'xx.htm'
9. 取得元素的属性
在ff中,自己定义的属性必须 getattribute() 取得
10. 在ff中没有 parentelement,parement.children 而用 parentnode,parentnode.childnodes
问题:
childnodes 的下标的含义在ie和ff中不同,ff的 childnodes 中会插入空白文本节点
解决方法:
可以通过 node.getelementsbytagname() 来回避这个问题
问题:
当html中节点缺失时,ie和ff对 parentnode 的解释不同,例如:
<form>
<table>
<input/>
</table>
</form>
ff中 input.parentnode 的值为form,而ie中 input.parentnode 的值为空节点
问题:
ff中节点自己没有 removenode 方法
解决方法:
必须使用如下方法 node.parentnode.removechild(node)
11. const 问题
问题:
在ie中不能使用 const 关键字
解决方法:
以 var 代替
12. body 对象
ff的 body 在 body 标签没有被浏览器完全读入之前就存在,而ie则必须在 body 完全被读入之后才存在
这会产生在ie下,文档没有载入完时,在body上appendchild会出现空白页面的问题
解决方法:
一切在body上插入节点的动作,全部在onload后进行
13. url encoding
问题:
一般ff无法识别js中的&
解决方法:
在js中如果书写url就直接写&不要写&
14. nodename 和 tagname 问题
问题:
在ff中,所有节点均有 nodename 值,但 textnode 没有 tagname 值,在ie中,nodename 的使用有问题
解决方法:
使用 tagname,但应检测其是否为空
15. 元素属性
ie下 input.type 属性为只读,但是ff下可以修改
16. document.getelementsbyname() 和 document.all[name] 的问题
问题:
在ie中,getelementsbyname()、document.all[name] 均不能用来取得 p 元素
是否还有其它不能取的元素还不知道(这个问题还有争议,还在研究中)
17. 调用子框架或者其它框架中的元素的问题
在ie中,可以用如下方法来取得子元素中的值
document.getelementbyid("framename").(document.)elementname
window.frames["framename"].elementname
在ff中则需要改成如下形式来执行,与ie兼容:
window.frames["framename"].contentwindow.document.elementname
window.frames["framename"].document.elementname
18. 对象宽高赋值问题
问题:
firefox中类似 obj.style.height = imgobj.height 的语句无效
解决方法:
统一使用
obj.style.height = imgobj.height + "px";
19. innertext的问题
问题:
innertext 在ie中能正常工作,但是 innertext 在firefox中却不行
解决方法:
在非ie浏览器中使用textcontent代替innertext
20. event.srcelement和event.toelement问题
问题:
ie下,even对象有srcelement属性,但是没有target属性;firefox下,even对象有target属性,但是没有srcelement属性
解决方法:
var source = e.target || e.srcelement;
var target = e.relatedtarget || e.toelement;
21. 禁止选取网页内容
问题:
ff需要用css禁止,ie用js禁止
解决方法:
ie:
obj.onselectstart = function() {return false;}
ff: -moz-user-select:none;
22. 捕获事件
问题:
ff没有setcapture()、releasecapture()方法
解决方法:
ie:
obj.setcapture();
obj.releasecapture();
ff:
window.captureevents(event.mousemove|event.mouseup);
window.releaseevents(event.mousemove|event.mouseup);
if (!window.captureevents) {
o.setcapture();
}else {
window.captureevents(event.mousemove|event.mouseup);
}
if (!window.captureevents) {
o.releasecapture();
}else {
window.releaseevents(event.mousemove|event.mouseup);
}
以上就是javascript中关于兼容性能的具体分析的详细内容。