首页 > saving > 转贴:我来说说 IE 与 Mozilla 中 JavaScript 的主要差异

转贴:我来说说 IE 与 Mozilla 中 JavaScript 的主要差异

2004年1月13日 hufey

原文
文章标题 我来说说 IE 与 Mozilla 中 JavaScript 的主要差异 [re: dlee]
张贴者: dlee (Pooh-Bah)
张贴日期 01/12/04 10:36
这篇帖子本身纯属原创,没有必要致谢 xxx 了,呵呵。
关于 JavaScript,O’Reilly 的《JavaScript 权威指南》(犀牛书)是最好的教材,大家可以从这本书入门。
有两个基于 JavaScript 的框架,大家感兴趣的可以找来看看。
http://webfx.eae.net
http://www.i-see.net/bindows/
我想说的是 JavaScript 是非常重要的技术,不要随便轻视它。
正文:
IE 与 Mozilla 的兼容性的问题 webfx 网站已经做了很好的尝试,他们对 IE 和 Mozilla 中 JavaScript 的差异做了很好的封装。
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;
}
}
–dlee
有人说一个人有烦恼是因为记性太好。那年开始,我忘记了很多事情,唯一有印象的,就是我喜欢桃花。

分类: saving 标签:
本文的评论功能被关闭了.