Frage

Ich habe eine Flex-swf-zu Gast bei http://www.a.com/a.swf.Ich habe eine flash-code auf einem anderen doamin, die versucht, das laden der SWF-Datei:

_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 versuchen Sie zu laden von Klassen aus der remote-SWF-Datei und erstellen Ihnen:

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

Wenn dieser code ausgeführt wird, erhalte ich 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, um diesen code zu erhalten zu arbeiten?

War es hilfreich?

Lösung

Dies ist beschrieben in Adobe Flex 3 Programmieren mit ActionScript 3 PDF auf Seite 550 (Kapitel 27:Flash Player-Sicherheit / Cross-scripting):

Wenn zwei SWF-Dateien geschrieben mit ActionScript 3.0 aus verschiedenen Domänen bereitgestellt werden—zum Beispiel, http://siteA.com/swfA.swf und http://siteB.com/swfB.swf—dann, in Flash Player standardmäßig nicht zulässt swfA.swf-Skript swfB.swf, noch swfB.swf-Skript swfA.swf.Eine SWF-Datei gibt die Erlaubnis, um SWF-Dateien aus anderen Domänen durch den Aufruf der Sicherheit.allowDomain().Durch aufrufen von Sicherheit.allowDomain("siteA.com"), swfB.swf gibt SWF-Dateien aus siteA.com die Erlaubnis script.

Weiter geht es in etwas mehr detail, mit Zeichnungen und allen.

Andere Tipps

Du wirst brauchen crossdomain.xml policy-Datei auf dem server, der die Datei, die Sie laden, es sollte Aussehen etwas wie diese:

<?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 root der domain, die Sie laden aus.

Auch müssen Sie den Lader zu Lesen diese Datei als solche:

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

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

Mayhaps System.Sicherheit.allowDomain was Sie brauchen?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top