У меня есть приложение AIR, основным содержимым которого является App.swf.Я хотел бы иметь другое приложение AIR, которое размещает и запускает App.swf.Когда я говорю «запустите его», я имею в виду, что он отображает приложение «WindowedApplication».
Вот код для двух проектов AIR (для краткости импорт исключен):
// App AIR Project -> App.mxml -> App.swf (it's just a window)
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
public function doSomething():void {
trace("doSomething called");
}
]]>
</mx:Script>
</mx:WindowedApplication>
// AirAppHostApplication AIR Project -> AirAppHostApplication.mxml -> AirAppHostApplication.swf
<?xml version="1.0" encoding="utf-8"?>
<custom:AirAppHostApplication xmlns:custom="components.*" />
// components/AirAppHostApplication.as
public class AirAppHostApplication extends WindowedApplication
{
private var ldr:Loader;
public function AirAppHostApplication()
{
addEventListener (FlexEvent.CREATION_COMPLETE, handleComplete);
}
private function handleComplete( event : FlexEvent ) : void
{
loadSwf("App.swf");
}
private function loadSwf(swf:String):void {
ldr = new Loader();
var req:URLRequest = new URLRequest(swf);
var ldrContext:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
ldr.load(req, ldrContext);
}
private function completeHandler(event:Event):void {
var appSystemManagerCls:* = ApplicationDomain.currentDomain.getDefinition("_app_mx_managers_SystemManager") as Class;
var appSystemManagerInstance:* = new appSystemManagerCls(Application.application);
var appInstance:WindowedApplication = appSystemManagerInstance.create();
appInstance.activate();
appInstance.doSomething();
}
}
При приложении возникает следующая ошибкаЗагружается .swf:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at mx.managers::SystemManager/initHandler()[C:\autobuild\galaga\frameworks\projects\framework\src\mx\managers\SystemManager.as:3001]
Я полагаю, что проблема связана с SystemManager AirAppHostApplication, конфликтующим с SystemManager приложения, поскольку оба они живут в одном домене приложения.Можно ли написать приложение AIR, в котором класс WindowedApplication не определен статически, а загружен во время выполнения путем загрузки SWF-файла и создания экземпляра подкласса WindowedApplication, содержащегося в SWF.
Причина, по которой я хочу это сделать, заключается в том, чтосценарий автоматизации, где я должен предположить, что у меня нет исходного кода для приложения, которое я автоматизирую, но у меня есть доступ к именам открытых классов и их открытым методам, предоставляемым для автоматизации.У меня есть полный контроль над средой, и мне не нужно иметь с этим никаких ограничений, поэтому я могу поместить 2 приложения AIR в один каталог и т. Д.
Возможно ли это?