Obecnie eksperymentuję z ładowaniem zewnętrznych plików SWF zarówno ze standardowej aplikacji AS3, jak i aplikacji AIR. Wygląda na to, że aplikacja AIR nie działa tak samo, jak standardowy plik SWF uruchamiany przez program Flash Player.LoaderContext i ApplicationDomain zmienia się w Adobe AIR?
Zgodnie z documentation właściwość z LoaderContext
jest również użyteczna w aplikacji AIR, ale wygląda na to, że nie działa.
Mam następujący kod:
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"));
}
}
}
Kompilacja ten kod jako plik SWF i uruchomienia go z Flash robi to wyjście, które wydaje się w porządku:
Child One parentDomain : [object ApplicationDomain]
Invoker parentDomain : null
Child One has Invoker : true
Invoker has Invoker : true
Ale ten sam kod ponieważ aplikacja AIR ma inne wyjście:
Child One parentDomain : null
Invoker parentDomain : null
Child One has Invoker : false
Invoker has Invoker : true
Zgodnie z dokumentacją n, pierwsze wyjście (za pomocą SWF z Flash Player, a nie aplikacją AIR) jest właściwe. Ponadto obejście tego fragmentu kodu i zmiana domeny aplikacji na inne możliwe konfiguracje (na przykład new ApplicationDomain(null)
lub ApplicationDomain.currentDomain
) wykonuje dokładnie to, co dokumentacja mówi za pomocą pliku SWF, ale nie zmienia danych wyjściowych aplikacji AIR.
Dowolna wskazówka, dlaczego AIR po prostu ignoruje domenę aplikacji przekazaną do kontekstu modułu ładującego? Wszelka dokumentacja dotycząca tego konkretnego problemu?
Dziękuję bardzo.
Należy pamiętać, że trzeba będzie użyć [allowCodeImport] jak powiedział @pigiuz –
Mam edytowane moją odpowiedź, aby wziąć to pod uwagę. Dzięki! – Tyn