Klingt wie das Problem ist, dass Safari nicht document.implementation.createDocument unterstützt als Methode zur holen und Last XML-Quellen. Sie müssen eine XMLHttpRequest verwenden, um das XML-AFAIK abzurufen und zu analysieren.
Ich habe versucht, eine modifizierte Version des Codes aus dem Apple-Tutorial, das Sie verknüpft, und es schien für mich zu arbeiten. Dieser Code ist nicht der beste der Welt, und es fehlt eine Menge Fehlerbehandlung, aber es ist der einzige Beweis für das Konzept, das ich zur Hand hatte.
Hinweis: Ich empfehle dringend, eine Bibliothek zu verwenden. Es gibt Browser-Inkonsistenzen mit XMLHttpRequests und XML-Parsing. Es ist die Investition wert!
Für eine nicht-Bibliothek Version habe ich eine modifizierte Version des Safari-Code, um das XMLHttpRequest zu bekommen:
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("");
}
}
die XML-Daten aus dem Ergebnis Grabbing ist nicht ohne seine eigenen Macken auch:
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;
}
Schließlich
verwenden, was man bekommt:
function callback(response) {
var xmlDoc = getXML(response);
if(xmlDoc) {
//do your work here
...
}
}
Wenn Sie immer noch finden Sie Probleme, es gibt ein paar Dinge, die Sie überprüfen können, wird wahrscheinlich Ihr Problem lösen.
- Haben Sie den Inhaltstyp auf text/xml festgelegt?
- Geht Ihre Anfrage tatsächlich zum Server und zurück?
- Wenn Sie den responseText alarmieren/untersuchen, sehen Sie etwas, das nicht dazugehört?
- Ist Ihr XML richtig formatiert? Führen Sie es durch einen Validator.
Viel Glück! Prost.
Danke für die schnelle Antwort! Diese Bibliothek arbeitet mit den Browsern, die ich brauche. Aber ich müsste meinen ganzen Code neu schreiben, um diese Bibliothek zu benutzen. Im Idealfall möchte ich nur meine Lade-XML-Funktion aktualisieren, um in Safari zu arbeiten, aber wenn es eine Lade-XML-Funktion gibt, kann ich aus einer Bibliothek importieren, die auch funktionieren würde. –
Ich habe das gleiche Problem. Gibt es noch andere Ideen als eine Bibliothek von Drittanbietern? –