首页 > js学习 > js基础知识 > 跨浏览器(兼容性)处理XML
2016
12-16

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

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

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文件则因为只有部分浏览器支持而无法跨浏览器。

最后编辑:
作者:qingheluo
这个作者貌似有点懒,什么都没有留下。