背景:目前公司需要将IE浏览器升级到谷歌浏览器,那么就会遇到各种兼容性的问题。下面说一说ActiveXObject对象不兼容的问题。
原因:ActiveObject是IE浏览器特有的对象,其他浏览器都是不兼容的。
所以需要做兼容。
一、判断是否是ie浏览器和非ie浏览器的方法有多种,在此只介绍用例中的方法:
1、解析xml字符串,得到xml对象的方式:
function createXml(str){
if(document.all){//IE浏览器
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = false;
xmlDoc.loadXML(str);
return xmlDoc;
}
else{//非IE浏览器
return new DOMParser().parseFromString(str, "text/xml");
}
}
2、解析xml文件,将其转换为xml对象的方式:
/**
* aXMLFileName是xml文件路径名
*/
function getXmlDoc(){
try{
if (window.ActiveXObject){
xmlDoc= new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = false;
isLoaded = xmlDoc.load(aXMLFileName);
}
else if(document.implementation&& document.implementation.createDocument){
try{
xmlDoc = document.implementation.createDocument('', '', null);
xmlDoc.async = false;
xmlDoc.load(aXMLFileName);
} catch(e){
var xmlhttp = new window.XMLHttpRequest();
xmlhttp.open("GET",aXMLFileName,false);
xmlhttp.send(null);
xmlDoc = xmlhttp.responseXML;
}
}
else{
alert("load data error");
}
}
catch(e){
alert(e.message);
}
}
二、实战案例
var xmlDom = null;
if(window.ActiveXObject){ //兼容IE浏览器
xmlDom = new ActiveXObject("Microsoft.XMLDOM");
xmlDom.loadXML(message);
var codes = xmlDom.getElementsByTagName("data");
var id = '';
var value = '';
document.all.aro_id.options[j+1] = new Option(value, id);
var flag = 0;
for(var j = 0; j < codes.length; j++){
if(codes[j].childNodes[0].firstChild.nodeValue != null && codes[j].childNodes[1].firstChild.nodeValue != null){
id = codes[j].childNodes[0].firstChild.nodeValue;
value = codes[j].childNodes[1].firstChild.nodeValue;
document.all.aro_id.options[j+1] = new Option(value, id);
flag = 1;
}
}
}else{
//兼容谷歌浏览器
xmlDom = new DOMParser().parseFromString(message, 'application/xml');
var codes = xmlDom.getElementsByTagName("data");
var id = '';
var value = '';
document.all.aro_id.options[j+1] = new Option(value, id);
var flag = 0;
for(var j = 0; j < codes.length; j++){
id = codes[j].childNodes[1],innerHTML;
value = codes[j].childNodes[3].innerHTML;
document.all.aro_id.options[j+1] = new Option(value, id);
flag = 1;
}
}