Article écrit par k-ny ( Blog ).
Lorsque l’on commence à faire un peu de flash dynamique, et que l’on comprend tout le potentiel de charger des fichiers externes (XML, flux RSS, etc…), on se heurte vite à certains obstacles !
Voici une liste exhaustive des méthodes concernées : - loadVariables, loadVariablesNum, MovieClip.loadVariables, LoadVars.load, LoadVars.sendAndLoad - XML.load, XML.sendAndLoad - XMLSocket.connect - Symboles importés d'une librairie partagée - Flash Remoting (NetServices.createGatewayConnection)
Dans ce billet, je vais aborder l’obstacle du chargement interdomaine et la manière officielle d’outrepasser cette limitation.
Cette limitation entre en vigueur dès que vous ciblez avec une url absolue (mème sur votre propre serveur)
Pour la version non-officielle allez voir ce tuto
Pour certaines raisons, flash ne permet pas l'execution et le chargement de certains fichiers provenant d'un domaine different de celui qui l'appel. Certains d'entre vous ce sont surement déjà retrouver “coincés” en voulant charger un flux rss distant dans un swf. C'est parfois assez frustrant ! Car on peut tout à fait charger une image distante, mais rien d'autre …. pourtant selon moi charger un xml distant ne presente pas vraiment plus de risque que charger une image …
Flash a penser à nous ! En permettant de creer des règles d'autorisation interdomaine.
En theorie celà signifie, que via un fichier de règle (”crossdomain.xml”) placé sur un domaine distant, on peut autoriser ou pas l'accès aux fichiers de ce domaine depuis le domaine où votre swf est hebergé …
En pratique celà implique que vous devez posseder les “clés” du domaine distant pour pouvoir y deposer votre fichier ”crossdomain.xml” !
Je decris cette methode dans ce tuto. Elle permet de loader des fichiers provenant d'un serveur pour lequel nous n'avons pas les “clés”.
On evitera cette methode autant que possible, car elle demande des ressources niveau serveur, de plus elle atteind vite ces limites.
Ce fichier s'installe donc à la racine du serveur sur lequel se trouve les fichiers à charger.
<?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"> <cross-domain-policy> <allow-access-from domain="domaine_a_autoriser" /> </cross-domain-policy>
Remplacer domaine_a_autoriser par le nom de domaine où se situe le swf.
Cas 1 : Je veux autoriser tous les domaines à acceder à mes fichiers situé sur mon serveur.
<?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"> <cross-domain-policy> <allow-access-from domain="*" /> </cross-domain-policy>
Cas 2 : Je veux autoriser tous les domaines en .fr et .be à acceder à mes fichiers situé sur mon serveur.
<?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"> <cross-domain-policy> <allow-access-from domain="*.fr" /> <allow-access-from domain="*.be" /> </cross-domain-policy>
Cas 3 : Je veux autoriser tous les sous-domaines de google.fr à acceder à mes fichiers situé sur mon serveur.
<?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"> <cross-domain-policy> <allow-access-from domain="*.google.fr" /> </cross-domain-policy>
Donc vous avez saisi le principe, le * sert de joker. Vous pouvez cumuler autant de permissions que necessaire.
Encore des questions? Besoin d'aide? Venez en discuter sur les forums Programmation Dynamique ou Programmation Actionscript.