Come faccio a chiamare un Flex SWF da un dominio remoto tramite il Flash (AS3)?
-
08-06-2019 - |
Domanda
Ho un Flex swf ospitato presso http://www.a.com/a.swf.Ho un codice flash su un altro doamin che tenta di caricare il file SWF:
_loader = new Loader();
var req:URLRequest = new URLRequest("http://services.nuconomy.com/n.swf");
_loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoaderFinish);
_loader.load(req);
Sul onLoaderFinish evento cerco di classi di carico da remoto SWF e creare loro:
_loader.contentLoaderInfo.applicationDomain.getDefinition("someClassName") as Class
Quando viene eseguito questo codice ottengo la seguente eccezione
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()
C'è un modo per ottenere questo codice funziona?
Soluzione
Tutto ciò è descritto in Adobe Flex 3 Programmazione ActionScript 3 PDF a pagina 550 (Capitolo 27: Sicurezza di Flash Player / Cross-scripting):
Se due file SWF scritti con ActionScript 3.0 vengono forniti da domini diversi & # 8212; ad esempio http: // siteA.com/swfA.swf e http://siteB.com/swfB.swf & # 8212; quindi, per impostazione predefinita, Flash Player non consente a swfA.swf di eseguire lo script swfB.swf, né swfB.swf di eseguire lo script swfA.swf. Un file SWF autorizza i file SWF di altri domini chiamando Security.allowDomain (). Chiamando Security.allowDomain (" siteA.com "), swfB.swf concede ai file SWF dall'autorizzazione siteA.com di copiarlo.
Continua con qualche dettaglio in più, con diagrammi e tutto.
Altri suggerimenti
Avrai bisogno di un file di criteri crossdomain.xml sul server che ha il file che carichi, dovrebbe assomigliare a questo:
<?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>
Inseriscilo come crossdomain.xml nella radice del dominio da cui stai caricando.
Inoltre devi impostare il caricatore per leggere questo file come tale:
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 );
esempio di codice visualizzato da http://blog.log2e.com/2008/08/15/when-a-cross-domain-policy-file-is-not-enough/
Mayhaps System.Security.allowDomain è quello che ti serve?