swf que programa para extension como chrome archivos abrir flex flash actionscript-3 security

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?



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.