2008-08-18 31 views
2

Ich habe eine Flex swf gehostet um http://www.a.com/a.swf. Ich habe einen Flash-Code auf einem anderen doamin, die die SWF versucht Laden:Wie rufe ich eine Flex-SWF von einer Remotedomäne mit Flash (AS3) auf?

_loader = new Loader(); 
var req:URLRequest = new URLRequest("http://services.nuconomy.com/n.swf"); 
_loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoaderFinish); 
_loader.load(req); 

Auf der onLoaderFinish Veranstaltung, die ich versuche, Klassen von dem Remote-SWF zu laden und erstellen:

_loader.contentLoaderInfo.applicationDomain.getDefinition("someClassName") as Class 

Wenn dieser Code ausgeführt werden Ich bekomme die folgende Ausnahme

SecurityError: Error #2119: Security sandbox violation: caller http://localhost.service:1234/flashTest/Main.swf cannot access LoaderInfo.applicationDomain owned by http://www.b.com/b.swf. 
    at flash.display::LoaderInfo/get applicationDomain() 
    at NuconomyLoader/onLoaderFinish() 

Gibt es eine Möglichkeit, diesen Code zu arbeiten?

Antwort

6

Das ist alles in The Adobe Flex 3 Programming ActionScript 3 PDF auf Seite 550 beschrieben (Kapitel 27: Flash Players Sicherheit/Cross-Scripting):

Wenn zwei SWF-Dateien mit Actionscript 3.0 geschrieben werden, aus verschiedenen Bereichen, zum Beispiel diente, http://siteA.com/swfA.swf und http://siteB.com/swfB.swf - Flash Player erlaubt standardmäßig nicht, dass swfA.swf das Skript swfB.swf oder swfB.swf das Skript sffA.swf verwendet. Eine SWF-Datei erteilt SWF-Dateien aus anderen Domänen die Berechtigung, indem sie Security.allowDomain() aufruft. Durch Aufrufen von Security.allowDomain ("siteA.com") erteilt swfB.swf SWF-Dateien von siteA.com die Berechtigung zum Skript.

Es geht weiter, mit Diagrammen und allen.

2

Sie erhalten eine crossdomain.xml Richtliniendatei auf dem Server erforderlich, die Datei hat Sie laden, sollte es eine etwas wie folgt aussehen:

<?xml version="1.0"?> 
<!-- http://www.foo.com/crossdomain.xml --> 
<cross-domain-policy> 
    <allow-access-from domain="www.friendOfFoo.com" /> 
    <allow-access-from domain="*.foo.com" /> 
    <allow-access-from domain="105.216.0.40" /> 
</cross-domain-policy> 

Legen Sie es als crossdomain.xml in der Wurzel der Domain, von der Sie laden.

Darüber hinaus müssen Sie den Loader setzen diese Datei als solche zu lesen:

var loaderContext:LoaderContext = new LoaderContext(); 
loaderContext.checkPolicyFile = true; 

var loader:Loader = new Loader(); 
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete); 
loader.load(new URLRequest("http://my.domain.com/image.png"), loaderContext); 

Codebeispiel yoinked von http://blog.log2e.com/2008/08/15/when-a-cross-domain-policy-file-is-not-enough/