在一个Ajax应用程序及大多数JavaScript代码中,必须考虑浏览器之间的差异问题。当在IE和Firefox浏览器中使用基于XML的解决方案时,有两种选择:基于所用的浏览器编写正确的代码,以创建自己的函数;或者使用现成的库。在大多数情况下,使用现成的库是最简单的方法,例如第2章中介绍的zXml库。zXml不仅支持XMLHttp,还提供了XML操作的通用接口。
例如,如果要创建XML DOM文档,就可以使用zXmlDom.createDocument():
var oXmlDom = zXmlDom.createDocument();
对于不同的浏览器,这行代码都能够创建DOM文档,无需为不同的浏览器提供不同的版本。此外,zXml还为标准的Firefox DOM文档添加了一些IE中实现的功能。
其中最重要的一个改进是提供对readyState属性和onreadystatechange事件处理函数的支持。原先对于Firefox,需要使用特定的onload事件处理函数,但现在则可以使用一个无需检测浏览器的代码,例如:
oXmlDom.onreadystatechange = function () {
if (oXmlDom.readyState == 4) {
//当文档成功载入后,完成某些操作
}
};
zXml库还为Firefox中的所有节点添加了原先没有的xml和text属性支持。原先需要使用XMLSerializer或者单独的函数来获取这些值,现在的做法和IE完全一样:
var oRoot = oXmlDom.documentElement;
var sFirstChildText = oRoot.firstChild.text;
var sXml = oRoot.xml;
zXml还为Firefox DOM文档提供了loadXML()方法,避免使用DOMParser对象。
var oXmlDom2 = zXmlDom.createDocument();
oXmlDom2.loadXML(sXml);
最后,zXml库还为Firefox的实现添加parseError对象。该对象与IE中相应的parseError对象非常类似。主要的区别在于errorCode属性,当发生错误时该属性设置为非零值。因此不要使用该属性来查找特定的错误,只可以用来判断是否出错。其他属性和IE基本一致:
if (oXmlDom.parseError.errorCode != 0) {
var str = "An error occurred!!\n" +
"Description: " + oXmlDom.parseError.reason + "\n" +
"File: " + oXmlDom.parseError.url + "\n" +
"Line: " + oXmlDom.parseError.line + "\n" +
"Line Position: " + oXmlDom.parseError.linePos + "\n" +
"Source Code: " + oXmlDom.parseError.srcText;
alert(str);
} else {
//成功载入的操作
}
当然你也不是一定要使用跨浏览器兼容的XML库,但这样的库确实相当有用。下面的小节就将使用zXml库来完成一个例子的开发。







