Sur notre site www.foo.com
nous voulons télécharger et utiliser http://feeds.foo.com/feed.xml
avec Javascript. Nous allons évidemment utiliser Access-Control mais pour les navigateurs qui ne supportent pas que nous considérons ce qui suit comme une solution de repli:Chargement de XML inter-domaines avec Javascript en utilisant un concept hybride iframe-proxy/xsl/jsonp?
Sur www.foo.com
, nous avons mis en document.domain
, fournir une fonction de rappel et charger l'alimentation dans un (caché) 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);
sur feeds.foo.com
, ajoutez xsl à feed.xml
et l'utiliser pour transformer l'alimentation dans un document html qui définit également document.domain
et appelle la fonction de rappel dans son parent avec les données d'alimentation comme 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>
Y at-il une meilleure façon de charger XML à partir feeds.foo.com et quelles sont les ramifications de cette astuce iframe-proxy/xslt/jsonp? (..et dans ce cas qu'elle ne satisfera pas?)
Remarques
- Cela ne fonctionne pas dans Safari & Chrome, mais puisque les deux support Access-Control il est très bien.
- Nous voulons peu ou pas de changement à
feeds.foo.com
- Nous sommes conscients (mais pas intéressé par) solutions proxy côté serveur
- mise à jour:wrote about it
juste pour que vous sachiez, avec easyXDM il n'y a pas besoin de faire confiance à l'autre partie - les deux documents communiquent uniquement via des chaînes. –