js针对IE 和 Mozilla 的差异

博客主要探讨了 Web 开发框架移植到 Mozilla 的情况,指出虽不困难但缺乏经济刺激。详细对比了 IE 与 Mozilla 在 HTML DOM、XML DOM、XML Data Island、XMLHTTP、访问本地文件系统及事件处理机制等方面的差异,多数问题可封装解决,事件处理机制封装有难度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

兼容性的问题 webfx 网站已经做了很好的尝试,他们对 IE 和 Mozilla 中 JavaScript 的差异做了很好的封装。
其实我们的 Web 开发框架移植到 Mozilla 上并不是非常困难。只是目前没有明显的经济利益刺激我们做这件事。
IE 与 Mozilla 的主要差别在于:
1、对 HTML DOM 规范的支持,IE 除了支持标准的 API,还提供了 document.all() 这个便于使用的方法。但是这个方法完全可以使用标准的 getElementById() 来替代。
2、对 XML DOM,IE 提供了 selectSingleNode() 和 selectNodes() 两个便于使用的方法,而 Mozilla 使用标准的 evaluate() 方法。解决的方法是在 Mozilla 中模拟 IE 的行为。IE 中的 XML DOM 是作为 ActiveX 插件的形式(打补丁的方式)提供的,Mozilla 则本身就支持 XML DOM。
3、IE 支持 XML Data Island,而 Mozilla 由于对 XML 有更好的支持,所以完全不需要提供 XML Data Island 这种机制。但是 Mozilla 可以模拟 IE 的 XML Data Island。
http://www.mozilla.org/xmlextras/xmldataislands/
4、对于 XMLHTTP 的支持,IE 使用 ActiveX 插件实现,Mozilla 则使用 XPCOM 组件实现。但是两者的接口是相同的。
5、访问本地文件系统的方法不同,IE 使用 ActiveX 插件,Mozilla 则使用 XPCOM 组件。
6、对于事件处理的机制完全不同,IE 采用“事件传播”(“事件起泡”)方式,Mozilla 采用“事件捕捉”方式。

问题 1、2、3、4、5 都可以通过封装的方式轻易解决,但是问题 6 要很好地封装就有些难度了。

Mozilla 中的 selectSingleNode() 和 selectNodes():

if(isMozilla); {
XMLDocument.prototype.selectSingleNode = function(tagname); {
var result = this.evaluate(tagname, this, null, 0, null);;
return result.iterateNext();;
}
//定义一个新的类以兼容 IE 中 selectNodes(); 的返回类型。
function __XMLNodes(result); {
this.length = 0;
this.pointer = 0;
this.array = new Array();;
var i = 0;
while((this.array[i]=result.iterateNext(););!=null);
i++;
this.length = this.array.length;
}
XMLNodes.prototype.nextNode = function(); {
this.pointer++;
return this.array[pointer-1];
}
XMLNodes.prototype.reset = function(); {
this.pointer = 0;
}
XMLDocument.prototype.selectNodes = function(tagname); {
var result = this.evaluate(tagname, this, null, 0, null);;
var xns = new __XMLNodes(result);;
return xns;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值