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?

È stato utile?

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?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top