创建兼容IE、火狐、chrome、oprea浏览器的xmlDom对象方法

14,306次阅读
7 条评论

共计 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

正文完
 0
任侠
版权声明:本站原创文章,由 任侠 于2012-09-25发表,共计1361字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(7 条评论)
验证码
fasfd
2012-10-23 21:33:47 回复

[quote=长春PBT]看不懂啊

     中国广东省广州市联通
帕金森治疗 评论达人 LV.1
2012-10-18 17:33:42 回复

都兼容吗? 博主!
学习下!
http://www.pjszl.cn

     中国广东省佛山市电信
2012-10-16 03:28:10 回复

在IE和火狐下,直接创建的xmlDom对象可以跨域访问xml文件。但xmlhttp为了安全性禁止跨域访问,当跨域访问时即会报错。

     中国安徽省蚌埠市电信
2012-10-08 05:36:17 回复

学习了,看来opera也终于主流了

     中国贵州省黔西南电信
长春PBT 评论达人 LV.1
2012-10-01 20:13:49 回复

看不懂啊

     中国安徽省蚌埠市电信
林肆 评论达人 LV.1
2012-09-29 09:56:24 回复

依旧看不懂啊,咱就会一点HTML代码来着,嘿嘿~

     中国湖北省电信
真人娱乐 评论达人 LV.1
2012-09-27 06:31:03 回复

学习到了

     中国上海上海市联通