XML de chargement de plusieurs domaines avec JavaScript en utilisant un concept iframe-proxy hybride / xsl / jsonp?

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

Question

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 de contrôle d'accès mais pour les navigateurs qui ne supportent pas nous considérons les éléments suivants comme solution de repli:

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);

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 quels cas il va échouer?)


Remarques

  • Cela ne fonctionne pas dans Safari et Chrome, mais depuis deux support de contrôle d'accès il est très bien.
  • Nous voulons peu ou pas de changement à feeds.foo.com
  • Nous sommes conscients (mais pas intéressé par) des solutions proxy du côté du serveur
  • Mise à jour: écrit à ce sujet
Était-ce utile?

La solution

Si vous avez le contrôle sur les deux domaines, vous pouvez essayer une bibliothèque de scripts inter-domaines comme EasyXDM , qui enveloppe bizarreries cross-navigateur et fournit une API facile à utiliser pour communiquer dans le script client entre les différents domaines utilisant le meilleur mécanisme disponible pour ce navigateur (par exemple postMessage si disponibles, d'autres mécanismes sinon).

Caveat: vous devez avoir le contrôle sur les deux domaines afin de le faire fonctionner (où « contrôle » signifie que vous pouvez placer des fichiers statiques sur les deux). Mais vous ne avez pas besoin de modifications de code côté serveur.

Une autre Caveat: il y a des implications de sécurité se ici-- que vous faites confiance script de l'autre domaine

Autres conseils

Vous pouvez utiliser apis yahoo ( YQL ) .. Il suffit de spécifier l'URL, le format et le rappel

Il est une sorte de solution côté serveur, mais pas sur votre serveur:)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top