Actualmente estoy experimentando con la carga de archivos SWF externos desde una aplicación AS3 estándar y una aplicación de AIR. Parece que la aplicación de AIR no actúa de la misma manera que un archivo SWF estándar ejecutado por Flash Player.LoaderContext y ApplicationDomain cambia con Adobe AIR?
De acuerdo con documentation, la propiedad applicationDomain
de LoaderContext
también se puede usar en una aplicación de AIR, pero parece que no funciona.
tengo el siguiente código:
package {
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.display.Sprite;
import flash.events.Event;
import flash.net.URLRequest;
import flash.system.ApplicationDomain;
import flash.system.LoaderContext;
public class Invoker extends Sprite
{
private var _ldr : Loader;
public function Invoker()
{
_ldr = new Loader();
_ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, onChildOneComplete);
var ldrC : LoaderContext = new LoaderContext(false,
new ApplicationDomain(ApplicationDomain.currentDomain)
);
_ldr.load(new URLRequest("otherSwf.swf"), ldrC);
}
private function onChildOneComplete(e : Event) : void
{
var c1ad : ApplicationDomain = (e.target as LoaderInfo).applicationDomain;
var inad : ApplicationDomain = ApplicationDomain.currentDomain;
trace("Child One parentDomain : " + c1ad.parentDomain);
trace("Invoker parentDomain : " + inad.parentDomain);
trace("Child One has Invoker : " + c1ad.hasDefinition("Invoker"));
trace("Invoker has Invoker : " + inad.hasDefinition("Invoker"));
}
}
}
Compilar este código como un archivo SWF y el lanzamiento con el reproductor Flash hace esta salida, que parece derecho:
Child One parentDomain : [object ApplicationDomain]
Invoker parentDomain : null
Child One has Invoker : true
Invoker has Invoker : true
Pero el mismo código como una aplicación de AIR tiene una salida diferente:
Child One parentDomain : null
Invoker parentDomain : null
Child One has Invoker : false
Invoker has Invoker : true
De acuerdo con la documentatio n, la primera salida (utilizando un SWF con Flash Player, y no una aplicación de AIR) es la correcta. Además, jugar con este fragmento y cambiar el dominio de la aplicación a otras configuraciones posibles (como new ApplicationDomain(null)
o ApplicationDomain.currentDomain
) explica exactamente lo que dice la documentación con el archivo SWF, pero no cambia el resultado de la aplicación AIR.
¿Alguna pista de por qué AIR simplemente está ignorando el dominio de la aplicación pasado al contexto del cargador? ¿Alguna documentación sobre este tema en particular?
Muchas gracias.
Tenga en cuenta que tendrá que utilizar [allowCodeImport] Según lo dicho por @pigiuz –
He editado mi respuesta para tener esto en cuenta. ¡Gracias! – Tyn