2009-07-06 5 views
2

J'essaye de charger des Gravatars dans Flash. Heureusement, ils ont fourni un fichier crossdomain.xml à http://en.gravatar.com/avatar/crossdomain.xmlFlash Crossdomain.xml Problèmes

Mon code:

Security.loadPolicyFile("http://en.gravatar.com/avatar/crossdomain.xml"); 
var loader:Loader = new Loader(); 
loader.load(new URLRequest("http://en.gravatar.com/avatar/" + gravatar + "?s=35&d=identicon")); 

Mais je suis toujours à obtenir cette erreur:

SecurityError: Error #2123: Security sandbox violation: LoaderInfo.content: [...] cannot access http://en.gravatar.com/avatar/97fbce86a5bbc520450168603172cd9e?s=35&d=identicon . No policy files granted access.
at flash.display::LoaderInfo/get content()
at PiecePlayerSmall/onLoadComplete()

J'ai aussi surveiller le trafic du fichier Flash envoi. Il est demandant:

Toutes les suggestions pour obtenir cette travailler et réduire le nombre de demandes à gravatar.com.

EDIT: Le code suivant fonctionne, grâce à Jacob

Security.loadPolicyFile("http://en.gravatar.com/avatar/crossdomain.xml"); 
var context:LoaderContext = new LoaderContext(); 
context.checkPolicyFile = true; 
context.applicationDomain = ApplicationDomain.currentDomain; 
var request:URLRequest = new URLRequest(
    "http://en.gravatar.com/avatar/" + gravatar + "?s=35&d=identicon"); 
var loader:Loader = new Loader(); 
loader.load(request, context); 
this.addChild(loader); 

Note: Ne pas essayer d'accéder au contenu directement dans le Event.COMPLETE

+0

Que dois-je faire si ma demande ne figure pas dans mon domaine actuel? –

+0

Si ce n'est pas votre domaine actuel, cela signifie que vous n'avez pas la permission d'accéder à leurs ressources. Dans ce cas, vous devez utiliser des méthodes de hack pour modifier le fichier crossdomain.xml. –

Répondre

7

Je suis autour d'une question similaire par en utilisant un LoaderContext. Voici un exemple de la façon de procéder:

var context:LoaderContext = new LoaderContext(); 
context.checkPolicyFile = true; 
context.securityDomain = SecurityDomain.currentDomain; 
context.applicationDomain = ApplicationDomain.currentDomain; 
var request:URLRequest = new URLRequest(
    "http://en.gravatar.com/avatar/" + gravatar + "?s=35&d=identicon"); 
var loader:Loader = new Loader(); 
loader.load(request, context); 
+0

Juste essayé cela, nouvelle erreur: Erreur # 2044: Non gérée SecurityErrorEvent :. text = Erreur # 2048: Violation du sandbox de sécurité: [...] impossible de charger les données de http://en.gravatar.com/avatar/97fbce86a5bbc520450168603172cd9e?s=35&d=identicon. –

+1

D'accord, cela a résolu mon problème! N'ajoutez pas le SecurityDomain, cela ne fait qu'empirer les choses. En outre, vous ne pouvez pas accéder directement au contenu du chargeur, cela génère une autre erreur. –

+0

@ John comment devriez-vous accéder au contenu alors? – cregox

Questions connexes