首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

4.1.3  跨浏览器兼容的XML

在一个Ajax应用程序及大多数JavaScript代码中,必须考虑浏览器之间的差异问题。当在IEFirefox浏览器中使用基于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中的所有节点添加了原先没有的xmltext属性支持。原先需要使用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库来完成一个例子的开发。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论