兼容性的问题 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;
}
}
分享到:
相关推荐
IE和Mozilla兼容性汇总
在开发过程中,开发的Javascript可能存在在不同的浏览器之间不能正常运行的问题,这个文档很好的说明了IE和Mozilla中的兼容性问题,希望能有点帮助。
IE和Mozilla中脚本兼容性汇总 比较实用
org.mozilla.javascript-1.7.2.jar资源包
org.mozilla.javascript
兼容IE6之前版本,IE7,Mozilla、Opera、Safari 和 大部分非 Microsoft 浏览器的AJAX发送类。 兼容IE6之前版本,IE7,Mozilla、Opera、Safari 和 大部分非 Microsoft 浏览器的AJAX发送类。
通过MOZILLA的javascript引擎(SpiderMonkey)执行js代码
控件发布包有3个系统文件组成,全部功能用几个控件参数和2组功能函数来实现。 尽管我们有个理想化的目标,那就是您不用详细了解这些参数或函数,仅仅看懂几个样例文件就能很轻松地开始使用本控件,为此Lodop提供了...
控件发布包有3个系统文件组成,全部功能用几个控件参数和2组功能函数来实现。 尽管我们有个理想化的目标,那就是您不用详细了解这些参数或函数,仅仅看懂几个样例文件就能很轻松地开始使用本控件,为此Lodop提供了...
IE和Mozilla的兼容性汇总event,需要的朋友可以参考下。
SpiderMonkey is Mozilla's JavaScript engine written in C/C++. It is used in various Mozilla products, including Firefox, and is available under the MPL2.
Readability.js一个mozilla的网页主体内容解析库
mozilla 平台介绍书籍和开发手册 方便进行PC,浏览器等客户端应用程序开发
本电子书为MDC(Mozilla Developer Center)http://developer.mozilla.org/的离线浏览版,共收录网页计4143页,包括AJAX,CSS,DOM,HTML,Javascript...因为花费了我大量心血和精力整理,所以分定得稍微高些,请见谅:)
AJAX 常用函数创建XMLHTTP对象,区别IE,Mozilla浏览器的函数,网上有很多创建XMLHTTP对象,区别IE,Mozilla浏览器的函数,这个比较不错,大家可以直接拿用了 代码如下:function getRequest() { http_request =...
利用CSS, 你可以有效地在Mozilla Firefox和Internet Explorer中显示或者隐藏垂直及水平滚动条. 强制显示滚动条: 复制代码代码如下: html { overflow: scroll; } 强制隐藏滚动条: 复制代码代码如下: ...
func(“never-online”) [removed] 这在IE或者Mozilla中也是合法的(ECMA标准中有函数直接量的定义)。 但是IE中还有另外一种更简单的命名方式可以简化我们的代码: ”demo”>http://blog.neve
[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]js判断IE6/IE7/FF 代码如下:if (window.XMLHttpRequest) { //Mozilla, Safari,IE7 alert(‘Mozilla, Safari,IE7 ‘); if(!window.ActiveXObject){ // Mozilla...