Caricamento XML dominio croce con JavaScript utilizzando un concetto / XSL / iframe jsonp-proxy ibrido?
-
18-09-2019 - |
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
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
- richieste dominio trasversali con jQuery di James Padolsey
- plugin jQuery
Non è tipo di soluzione sul lato server, tuttavia sul server:)