XML de chargement de plusieurs domaines avec JavaScript en utilisant un concept iframe-proxy hybride / xsl / jsonp?
-
18-09-2019 - |
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
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
- requêtes inter-domaines avec jQuery par James Padolsey
- plugin jQuery
Il est une sorte de solution côté serveur, mais pas sur votre serveur:)