2009-07-06 12 views
2

Ich versuche, Gravatars in Flash zu laden. Zum Glück, wenn sie eine crossdomain.xml Datei auf http://en.gravatar.com/avatar/crossdomain.xmlFlash Crossdomain.xml Probleme

Mein 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")); 

Aber ich bin immer noch diesen Fehler:

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()

ich überwacht auch den Verkehr der Flash-Datei ist Senden. Es anfordernden:

Irgendwelche Vorschläge für diese bekommen arbeiten und die Anzahl der Anfragen an gravatar.com reduzieren.

EDIT: Der folgende Code, dank 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); 

Hinweis funktioniert: Versuchen Sie nicht, den Inhalt direkt in der Event.COMPLETE

+0

was passiert, wenn meine URL nicht auf meiner aktuellen Domäne ist? –

+0

Wenn es sich nicht um Ihre aktuelle Domäne handelt, haben Sie keine Berechtigung, auf ihre Ressourcen zuzugreifen. In diesem Fall müssen Sie einige Hack-Methoden ausführen, um die crossdomain.xml inline zu modifizieren. –

Antwort

7

ich um ein ähnliches Problem bekam zuzugreifen, indem mit einem LoaderContext. Hier ist ein Beispiel dafür, wie dies zu tun:

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

Gerade versucht, dass, neuer Fehler: Fehler # 2044: Unhandled SecurityErrorEvent :. text = Fehler # 2048: Sicherheits-Sandbox-Verletzung: [...] kann keine Daten von http://en.gravatar.com/avatar/97fbce86a5bbc520450168603172cd9e?s=35&d=identicon laden. –

+1

Okay, das hat mein Problem gelöst! Fügen Sie die SecurityDomain jedoch nicht hinzu, es macht die Dinge nur noch schlimmer. Außerdem können Sie nicht direkt auf den Inhalt des Loaders zugreifen, der einen weiteren Fehler verursacht. –

+0

@John Wie sollten Sie dann auf den Inhalt zugreifen? – cregox