Forums Développement Multimédia

Les formations Mediabox
Les formations Mediabox



crossdomain.xml

Compatible ActionScript 2. Cliquer pour en savoir plus sur les compatibilités.Par k-ny, le 05 avril 2007

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

Au programme

Preface

Flash et la securité

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 …

Solution du fichier "crossdomain.xml"

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” !

Solution via l'intermediaire d'un script php

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.

Le fichier crossdomain.xml

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.

Exemples

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.

En savoir plus