注册 登录

清河洛

跨浏览器(兼容性)处理XML

qingheluo2016-12-16清河洛316
如果要实现跨浏览器就要解决几个问题:1.load()只有IE、Firefox、Opera支持,所以无法跨浏览器。 2.获取XML DOM对象顺序问题,先判断先进的DOM2的,然后再去判断落后的IE。 3.针对不同的IE和DOM2级要使用不同的序列化。 4.针对不同的报错进行不同的报错机制。 一、我们需要跨浏览器获取XML DOMfunction getXMLDOM(xmlStr) { var xmlDom = null; if (typeof window.DOMParser != 'undefined') { //W3C xmlDom...

如果要实现跨浏览器就要解决几个问题:

1.load()只有IE、Firefox、Opera支持,所以无法跨浏览器。
2.获取XML DOM对象顺序问题,先判断先进的DOM2的,然后再去判断落后的IE。
3.针对不同的IE和DOM2级要使用不同的序列化。
4.针对不同的报错进行不同的报错机制。

一、我们需要跨浏览器获取XML DOM

function getXMLDOM(xmlStr) {
    var xmlDom = null;
    if (typeof window.DOMParser != 'undefined') { //W3C
        xmlDom = (new DOMParser()).parseFromString(xmlStr, 'text/xml');
        var errors = xmlDom.getElementsByTagName('parsererror');
        if (errors.length > 0) {
            throw new Error('XML解析错误:' + errors[0].firstChild.nodeValue);
        }
    } else if (typeof window.ActiveXObject != 'undefined') { //IE
        var version = [
        'MSXML2.DOMDocument.6.0',
        'MSXML2.DOMDocument.3.0',
        'MSXML2.DOMDocument'
        ];
        for (var i = 0; i < version.length; i ++) {
            try {
                xmlDom = new ActiveXObject(version[i]);
            } catch (e) {
                //跳过
            }
        }
        xmlDom.loadXML(xmlStr);
        if (xmlDom.parseError != 0) {
            throw new Error('XML解析错误:' + xmlDom.parseError.reason);
        }
    } else {
        throw new Error('您所使用的系统或浏览器不支持XML DOM!');
    }
    return xmlDom;
}

//其次,我们还必须跨浏览器序列化XML

function serializeXML(xmlDom) {
    var xml = '';
    if (typeof XMLSerializer != 'undefined') {
        xml = (new XMLSerializer()).serializeToString(xmlDom);
    } else if (typeof xmlDom.xml != 'undefined') {
        xml = xmlDom.xml;
    } else {
        throw new Error('无法解析XML!');
    }
    return xml;
}

由于兼容性序列化过程有一定的差异,可能返回的结果字符串可能会有一些不同。至于load()加载XML文件则因为只有部分浏览器支持而无法跨浏览器。



网址导航