Caricamento XML dominio croce con JavaScript utilizzando un concetto / XSL / iframe jsonp-proxy ibrido?

StackOverflow https://stackoverflow.com/questions/1875379

Domanda

Sul nostro sito www.foo.com vogliamo scaricare e utilizzare http://feeds.foo.com/feed.xml con Javascript. Useremo ovviamente Ingressi Controllo ma per i browser che non lo supportano stiamo considerando quanto segue come un ripiego:

On www.foo.com , abbiamo impostato document.domain, fornire una funzione di callback e caricare il feed in una (nascosta) 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);

On feeds.foo.com , aggiungere un XSL per feed.xml e utilizzarlo per trasformare il feed in un documento HTML che definisce anche document.domain e chiama la funzione di richiamata nel suo genitore con i dati del feed come JSON:

<?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>

C'è un modo migliore per caricare XML da feeds.foo.com e quali sono le ramificazioni di questo / XSLT / jsonp trucco iframe-proxy? (..E in quali casi sarà fallire?)


Note

  • Questo non funziona in Safari e Chrome, ma dal momento che sia il supporto Ingressi Controllo va bene.
  • Vogliamo poco o nessun cambiamento per feeds.foo.com
  • Siamo consapevoli (ma non è interessato a) soluzioni proxy lato server
  • Aggiornamento: ha scritto su di esso
È stato utile?

Soluzione

Se hai il controllo su entrambi i domini, si può provare una libreria di scripting cross-domain come EasyXDM , che avvolge peculiarità cross-browser e fornisce un'API di facile uso per comunicare nello script client tra domini diversi utilizzando il meccanismo migliore disponibile per tale browser (es postMessage eventualmente, altri meccanismi in caso contrario).

Avvertimento: è necessario avere il controllo su entrambi i domini in modo da farlo funzionare (dove "controllo": è possibile inserire i file statici su entrambi). Ma non avete bisogno di alcuna modifica del codice lato server.

Un altro avvertimento: ci sono implicazioni di sicurezza qui-- assicurarsi di fiducia sceneggiatura di l'altro dominio

!

Altri suggerimenti

È possibile utilizzare le API di Yahoo ( YQL ) .. Basta specificare l'URL, il formato e il callback

Non è tipo di soluzione sul lato server, tuttavia sul server:)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top