我正在尝试使用Javascript加载XML文件,我还没有找到适用于IE,Firefox和Safari的好功能。我目前使用的加载功能基本上是w3schools教程中的一个:
http://www.w3schools.com/XML/tryit.asp?filename=tryxml_dom_createelement
确切的代码如下:
if (window.ActiveXObject)
{
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
}
// code for Mozilla, Firefox, Opera, etc.
else if (document.implementation.createDocument)
{
xmlDoc=document.implementation.createDocument("","",null);
}
else
{
alert('Your browser cannot handle this script');
}
xmlDoc.async=false;
xmlDoc.load(dname);
其中dname = xml文件的url。此代码获取“TypeError:Value undefined(表达式xmlDoc.load的结果)不是对象。”在Safari。
我也试过这个网站上的代码:
http://developer.apple.com/internet/webcontent/xmlhttpreq.html
但是,它会产生一个空XML文件。有人可以帮忙吗?
答案 0 :(得分:1)
听起来问题是Safari不支持 document.implementation.createDocument 作为获取和加载 XML源的方法。您必须使用XMLHttpRequest来获取和解析XML AFAIK。
我已经尝试了您链接的Apple教程中的代码的修改版本,它似乎对我有用。这段代码不是世界上最好的,并且它缺少大量的错误处理,但它是我手边的唯一概念证据。
注意:强烈建议您使用库。 XMLHttpRequests和XML解析存在大量的浏览器不一致性。值得投资!
对于非库版本,我使用了修改后的safari代码版本来获取XMLHttpRequest:
function getXHR(url,callback) {
var req = false;
// branch for native XMLHttpRequest object
if(window.XMLHttpRequest && !(window.ActiveXObject)) {
try {
req = new XMLHttpRequest();
} catch(e) {
req = false;
}
// branch for IE/Windows ActiveX version
} else if(window.ActiveXObject) {
try {
req = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
try {
req = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
req = false;
}
}
}
if(req) {
req.onreadystatechange = function() { callback( req ) };
req.open("GET", url, true);
req.send("");
}
}
从结果中抓取XML并非没有自己的怪癖:
function getXML( response ) {
if( response.readyState==4 ) {
//Get the xml document element for IE or firefox
var xml;
if ( response.responseXML ) {
xml = new ActiveXObject("Microsoft.XMLDOM");
xml.async = false;
xml.loadXML(response.responseText);
} else {
xml = response.responseXML;
}
return xml;
}
return null;
}
最后使用你得到的东西:
function callback( response ) {
var xmlDoc = getXML( response );
if( xmlDoc ) {
//do your work here
...
}
}
如果您仍然遇到问题,可以检查一些可能解决问题的方法。
祝你好运!欢呼声。
答案 1 :(得分:0)
您可能需要查看XML for <Script>。我看过一些帖子表明他们用Safari解决了Safari的问题。