共计 1361 个字符,预计需要花费 4 分钟才能阅读完成。
在IE和火狐下,可以直接创建xmlDom对象来载入xml文件,但是在chrome和opera等webkit内核的浏览器下,则只能通过xmlhttp方式进行获取。
在IE和火狐下,直接创建的xmlDom对象可以跨域访问xml文件。但xmlhttp为了安全性禁止跨域访问,当跨域访问时即会报错如下:
Uncaught Error: NETWORK_ERR: XMLHttpRequest Exception 101
以下是一段兼容主流浏览器的xmlDom对象获取方法,仅供参考讨论,具体示例可参见本站首页的英语句子插件的效果(原版pjblog英语句子插件不支持webkit内核浏览器)。
//检测系统支持的XMLDom方式 | |
function E_getControlPrefix() { | |
var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"]; | |
var o, o2; | |
for (var i = 0; i < prefixes.length; i++) { | |
try { | |
// try to create the objects | |
o = new ActiveXObject(prefixes + ".XmlHttp"); | |
o2 = new ActiveXObject(prefixes + ".XmlDom"); | |
return E_getControlPrefix.prefix = prefixes; | |
} | |
catch (ex) {}; | |
} | |
} | |
//创建xmldom对象 | |
function loadXmlFile(xmlFile) { | |
var xmlDom = null; | |
if (window.ActiveXObject) { //支持IE浏览器,可跨域 | |
xmlDom = new ActiveXObject(E_getControlPrefix() + ".XMLDOM"); | |
//xmlDom.loadXML(xmlFile);//如果用的是XML字符串 | |
xmlDom.load(xmlFile); //如果用的是xml文件。 | |
} else if (document.implementation && document.implementation.createDocument) { //支持火狐浏览器,可跨域 | |
xmlDom=document.implementation.createDocument("","",null); | |
xmlDom.load(xmlFile); | |
} else if (window.XMLHttpRequest){ //xmlhttp方式,支持火狐、chrome、oprea等浏览器,但不可跨域 | |
var xmlhttp = new window.XMLHttpRequest(); | |
xmlhttp.open("GET", xmlFile, false); | |
xmlhttp.send(null); | |
if (xmlhttp.status == 200) { | |
xmlDom = xmlhttp.responseXML; | |
} | |
} else { | |
xmlDom = null; | |
} | |
return xmlDom; | |
} |
注:
由于xmlhttp方式不允许跨域,所以访问非本域名地址下的xml文件时即会报错。当在本地以无域名的方式访问本地xml文件,应该也是一样当做跨域处理,所以也会同样的报错如下:
Uncaught Error: NETWORK_ERR: XMLHttpRequest Exception 101
正文完