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
War es hilfreich?

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

Es ist eine Art von serverseitige Lösung, jedoch nicht auf dem Server:)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top