flex - que - swf download
¿Cómo llamo un Flex SWF desde un dominio remoto usando Flash(AS3)? (3)
Tengo un archivo SWF de Flex alojado en http://www.a.com/a.swf . Tengo un código de destello en otro doamin que intenta cargar el SWF:
_loader = new Loader();
var req:URLRequest = new URLRequest("http://services.nuconomy.com/n.swf");
_loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoaderFinish);
_loader.load(req);
En el evento onLoaderFinish, intento cargar clases desde el SWF remoto y crearlas:
_loader.contentLoaderInfo.applicationDomain.getDefinition("someClassName") as Class
Cuando se ejecuta este código, obtengo la siguiente excepción
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()
¿Hay alguna forma de hacer que este código funcione?
Mayhaps System.Security.allowDomain es lo que necesitas?
Necesitará un archivo de política crossdomain.xml en el servidor que tiene el archivo que carga, debería tener un aspecto similar a este:
<?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>
Ponlo como crossdomain.xml en la raíz del dominio desde el que estás cargando.
También necesita configurar el cargador para leer este archivo como tal:
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 );
muestra del código en http://blog.log2e.com/2008/08/15/when-a-cross-domain-policy-file-is-not-enough/
Todo esto se describe en El PDF de Adobe Flex 3 Programming ActionScript 3 en la página 550 (Capítulo 27: Seguridad de Flash Player / Cross-scripting):
Si dos archivos SWF escritos con ActionScript 3.0 se publican desde diferentes dominios, por ejemplo, http://siteA.com/swfA.swf y http://siteB.com/swfB.swf , entonces, de manera predeterminada, Flash Player no lo hace. permita que swfA.swf script swfB.swf, ni swfB.swf a la secuencia de comandos swfA.swf. Un archivo SWF otorga permiso a archivos SWF de otros dominios llamando a Security.allowDomain (). Al llamar a Security.allowDomain ("siteA.com"), swfB.swf le da permiso a los archivos SWF de siteA.com para que lo guionen.
Continúa con más detalle, con diagramas y todo.