前言
这样主要是整理一下,之前做过的兼容一些浏览器的事情,而且因为IE比较特殊,而且各个版本差异化非常大,所以这边有针对IE进行归纳:IE 浏览器兼容问题整理
而这边更多的是在html 和 JavaScript 的使用上来进行整理, css 会比较少。
自定义属性问题
说明:
IE下,可以使用获取常规属性的方法来获取自定义属性,也可以使用getAttribute()获取自定义属性;Firefox下,只能使用getAttribute()获取自定义属性.
解决方法:
统一通过getAttribute()获取自定义属性。
event.x与event.y问题
说明:
IE下,even对象有x,y属性,但是没有pageX,pageY属性;Firefox下,even对象有pageX,pageY属性,但是没有x,y属性.
解决方法:
使用1
mX = event.x ? event.x : event.pageX;
来代替IE下的event.x或者Firefox下的event.pageX.
event.srcElement问题
说明:
IE下,event对象有srcElement属性,但是没有target属性;Firefox下,even对象有target属性,但是没有srcElement属性.
解决方法:
使用1
obj = event.srcElement ? event.srcElement : event.target;
来代替IE下的event.srcElement或者Firefox下的event.target。 请同时注意event的兼容性问题。
innerText 问题
innerText在IE中能正常工作,但是innerText在FireFox中却不行. 需用textContent。
body 对象
说明:
FF的 body 在 body 标签没有被浏览器完全读入之前就存在,而IE则必须在 body 完全被读入之后才存在,这会产生在IE下,文档没有载入完时,在body上appendChild会出现空白页面的问题
解决方法:
一切在body上插入节点的动作,全部在onload后进行
nodeName 和 tagName 问题
说明:
在FF中,所有节点均有 nodeName 值,但 textNode 没有 tagName 值,在IE中,nodeName 的使用有问题
解决方法:
使用 tagName,但应检测其是否为空
removeNode 方法
说明:
FF中节点自己没有 removeNode 方法
解决方法:
必须使用如下方法 node.parentNode.removeChild(node)
关于frame
说明:
在IE中可以用 window.testFrame 取得该frame,FF中不行
解决方法:1
2window.top.document.getElementById("testFrame").src = 'xx.htm'
window.top.frameName.location = 'xx.htm'
document.form.item 问题
说明:
代码中存在 document.formName.item(“itemName”) 这样的语句,不能在FF下运行
解决方法:
改用 document.formName.elements[“elementName”]
parentNode 问题
说明:
当html中节点缺失时,IE和FF对 parentNode 的解释不同,demo:1
2
3
4
5<form>
<table>
<input/>
</table>
</form>
FF中 input.parentNode 的值为form,而IE中 input.parentNode 的值为空节点
调用子框架或者其它框架中的元素的问题
说明:
在IE中,可以用如下方法来取得子元素中的值1
2document.getElementById("frameName").(document).elementName
window.frames["frameName"].elementName
解决方法:
在FF中则需要改成如下形式来执行,与IE兼容:1
2window.frames["frameName"].contentWindow.document.elementName
window.frames["frameName"].document.elementName
对象宽高赋值问题
说明:
FireFox中类似 obj.style.height = imgObj.height 的语句无效
解决方法:
统一使用 obj.style.height = imgObj.height + “px”;