Laden Cross-Domain-XML mit Javascript ein Hybrid-iframe-Proxy / xsl / JSONP Konzept?
-
18-09-2019 - |
Frage
Auf unserer Website www.foo.com
wir herunterladen möchten, und verwenden http://feeds.foo.com/feed.xml
mit Javascript. Wir verwenden offensichtlich Access-Control aber für Browser, die es nicht unterstützen wir betrachten die folgenden als Ausweich:
Auf www.foo.com
, setzen wir document.domain
, bieten eine Callback-Funktion und laden Sie das Futter in einen (versteckten) iframe
:
document.domain = 'foo.com';
function receive_data(data) {
// process data
};
var proxy = document.createElement('iframe');
proxy.src = 'http://feeds.foo.com/feed.xml';
document.body.appendChild(proxy);
Auf feeds.foo.com
, eine XSL fügen Sie feed.xml
und verwenden Sie den Feed in ein HTML-Dokument zu verwandeln, die auch document.domain
und ruft die Callback-Funktion in seine Eltern mit den Feed-Daten als Json setzt:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="ROOT">
<html><body>
<script type="text/javascript">
document.domain = 'foo.com';
parent.receive_data([<xsl:apply-templates/>]);
</script>
</body></html>
</xsl:template>
<!-- templates that transform data into json objects go here -->
</xsl:stylesheet>
Gibt es einen besseren Weg, XML laden von feeds.foo.com und was sind die Auswirkungen dieses iframe-proxy / xslt / JSONP Trick? (..Und in welchen Fällen wird es scheitern?)
Bemerkungen
- Das funktioniert nicht in Safari & Chrome, aber da beide Unterstützung Access-Control es ist in Ordnung.
- Wir wollen wenig oder keine Änderung
feeds.foo.com
- Wir sind uns bewusst, (aber nicht interessiert) serverseitigen Proxy-Lösungen
- Update: schrieb darüber
Lösung
Wenn Sie die Kontrolle über beide Domänen haben, können Sie versuchen, eine Cross-Domain-Scripting-Bibliothek wie EasyXDM , die Wraps Cross-Browser-Macken und bietet einen einfach zu bedienende API für in Client-Skript zwischen verschiedenen Domänen in Verbindung steht, den besten verfügbaren Mechanismus für diesen Browser (zB postmessage falls vorhanden, andere Mechanismen, wenn nicht).
Vorab: Sie müssen die Kontrolle über beide Domänen haben, um damit es funktioniert (wobei „Kontrolle“ bedeutet, dass Sie statische Dateien auf beide platzieren können). Aber Sie brauchen keine serverseitigen Code-Änderungen.
Ein weiterer Caveat: Es gibt Auswirkungen auf die Sicherheit hier-- sicherstellen, dass Sie die anderen Domain-Skript vertrauen
!Andere Tipps
Sie können Yahoo APIs verwenden ( YQL ) .. Nur angeben url, Format und Callback
- Kreuz Domain-Anfragen mit jQuery von James Padolsey
- jQuery-Plugin
Es ist eine Art von serverseitige Lösung, jedoch nicht auf dem Server:)