2010-06-19 3 views
2

J'essaye de charger un fichier xml de wikipedia dans mon film flash.AS3 Chargement de XML depuis un autre domaine

loader = new URLLoader(); 
loader.addEventListener(Event.COMPLETE, tweetLoaded); 
loader.load(new URLRequest("http://en.wikipedia.org/w/api.php?action=query&rvprop=content&format=xml&pageids="+subNum)); 
loader.addEventListener(IOErrorEvent.IO_ERROR, onIOErrorFunction); 

Cela fonctionne très bien lorsque le fichier flash est exécuté localement, mais lorsque je télécharge sur mon domaine, il ne semble pas fonctionner. J'ai lu ailleurs que la règle de domaine croisé ne s'applique pas aux fichiers XML uniquement aux images et autres médias. Est-ce vrai? Si ce n'est pas le cas, est-ce que je peux charger des fichiers XML à partir de domaines autres que celui sur lequel le swf est hébergé?

grâce

EDIT:

D'accord, je suis vraiment confus, mes requêtes de programme à la fois API Bing et l'API wiki médias. L'appel API Bing fonctionne très bien, je peux récupérer les résultats de recherche XML à partir de ce bon. Mais l'appel wikipedia ne fonctionne pas (en ligne). J'ai essayé d'écouter Security_Error sur l'appel de wikipedia, mais il ne se déclenche pas.

Quelqu'un a-t-il des idées? Perdre un peu.

Répondre

3

Une solution de contournement est la configuration d'un proxy avec un langage côté serveur, de sorte que votre swf charge les données de votre domaine. Ce proxy transmet la requête à l'hôte réel et renvoie la réponse au swf. Du côté flash, cela fonctionne de manière transparente.

Vous pouvez rendre votre proxy plus ou moins Sophistiqué, mais il pourrait être aussi simple que (en php):

echo file_get_contents($_GET['target_url']); 

Ceci est juste pour vous donner une idée, vous pouvez valider le paramètre target_url . Demandez à votre swf d'appeler ce script php et passez le paramètre target_url en paramètre. Quelque chose comme ceci:

var url:String = "proxy.php"; 
var paramVal:String = encodeURIComponent("http://en.wikipedia.org/w/api.php?action=query&rvprop=content&format=xml&pageids="+subNum); 
url += "?target_url=" + paramVal; 
loader.load(new URLRequest(url)); 

Notez que pour php cela nécessitera fopen permettant d'urls (autorisations similaires pourraient être neccesary pour d'autres technologies côté serveur). De plus, gardez à l'esprit que cela affectera la consommation de bande passante de votre serveur.

PS

Bing fonctionne parce qu'ils ont un fichier de stratégie crossdomain en place pour permettre l'accès aux fonds souverains d'autres domaines.

http://api.bing.net/crossdomain.xml

ne pas Wikipédia un fichier de stratégie crossdomain qui vous donne accès d'autres domaines, de sorte que vous ne pouvez pas vous connecter directement à partir de votre swf.

+0

ahh merci pour cela, il semble juste bizarre, je demande également BING pour récupérer des images que je peux faire en utilisant un fichier xml cross-domaine est-ce pas possible pour flash? –

+0

@ user150946. Découvrez ma modification concernant Bing. –

+0

Ahh merci pour la clarification. Serait-il possible d'utiliser Javascript/JQuery au lieu de PHP? –

5

Merci beaucoup pour votre aide. A la fin j'ai utilisé http://pipes.yahoo.com

J'ai créé un tuyau qui a pris un numéro d'identification puis craché un objet JSON avec le titre de la page wikipedia correspondante.

que vous pouvez utiliser ici http://pipes.yahoo.com/wikibyid

Pour toute personne faisant autre cela, vous devez vous assurer que vous accédez à la conduite de la yahoo api URL http://pipes.yahooapis.com/ que ce domaine a le fichier crossdomain.xml.

+0

Je suis contente que tu sois là, je ne savais pas que ce service existait, c'est bon à savoir, ça a l'air très cool et ça peut vraiment être utile, merci de l'avoir partagé! –