跨浏览器(兼容性)处理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文件则因为只有部分浏览器支持而无法跨浏览器。