Код Actionscript не выполняется без взаимодействия с пользователем - PullRequest
0 голосов
/ 27 сентября 2011

Следующий код работает должным образом: когда пользователь нажимает кнопку, установщик автоматически запускается.

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
               creationComplete="applicationInit(event)">

<fx:Script>
    <![CDATA[
        import flash.utils.setTimeout;

        import mx.events.FlexEvent;

        private var airSWF:Object;
        private var airSWFLoader:Loader = new Loader();
        private var loaderContext:LoaderContext = new LoaderContext(); 

        private function applicationInit(event:FlexEvent):void {
            this.loaderContext.applicationDomain = ApplicationDomain.currentDomain;
            this.airSWFLoader.contentLoaderInfo.addEventListener(Event.INIT, onAirInit);
            this.airSWFLoader.load(new URLRequest("http://airdownload.adobe.com/air/browserapi/air.swf"), loaderContext);
        }

        private function onAirInit(event:Event):void {
            this.airSWF = event.target.content;
            this.button.addEventListener(MouseEvent.CLICK, installApp);
        }

        private function installApp(event:MouseEvent):void {
            var url:String = "URL HERE";
            var runtimeVersion:String = "2.7";
            var arguments:Array = ["launchFromBrowser"];
            this.airSWF.installApplication(url, runtimeVersion, arguments);
        }
    ]]>
</fx:Script>

<s:Button id="button" label="Download" horizontalCenter="0" verticalCenter="0"/>
</s:Application>

Тем не менее, как ни странно, следующий код не работает должным образом: он не запускаетустановщик при создании.

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
               creationComplete="applicationInit(event)">

<fx:Script>
    <![CDATA[
        import flash.utils.setTimeout;

        import mx.events.FlexEvent;

        private var airSWF:Object;
        private var airSWFLoader:Loader = new Loader();
        private var loaderContext:LoaderContext = new LoaderContext(); 

        private function applicationInit(event:FlexEvent):void {
            this.loaderContext.applicationDomain = ApplicationDomain.currentDomain;
            this.airSWFLoader.contentLoaderInfo.addEventListener(Event.INIT, onAirInit);
            this.airSWFLoader.load(new URLRequest("http://airdownload.adobe.com/air/browserapi/air.swf"), loaderContext);
        }

        private function onAirInit(event:Event):void {
            this.airSWF = event.target.content;
            installApp();
        }

        private function installApp():void {
            var url:String = "URL HERE";
            var runtimeVersion:String = "2.7";
            var arguments:Array = ["launchFromBrowser"];
            this.airSWF.installApplication(url, runtimeVersion, arguments);
        }
    ]]>
</fx:Script>

<s:Button id="button" label="Download" horizontalCenter="0" verticalCenter="0"/>
</s:Application>

Я проверил, что функция installApp выполняется.

Почему не работает второй фрагмент кода?Требуется ли взаимодействие с пользователем?Если так, то как обойти это?

1 Ответ

1 голос
/ 27 сентября 2011

Да, для работы установщика AIR необходимо взаимодействие с пользователем (пользовательское событие).К сожалению, я не могу найти официальную информацию по этому вопросу, но я сталкивался с этой проблемой в прошлом.Он построен таким образом по соображениям безопасности, так что ни одно приложение не может устанавливать нежелательные приложения в фоновом режиме.

РЕДАКТИРОВАТЬ: Найдено: http://livedocs.adobe.com/flex/3/html/help.html?content=distributing_apps_3.html

Установка приложения AIR избраузер

SWF-файл может установить приложение AIR, вызвав метод installApplication () в файле air.swf, загруженном из http://airdownload.adobe.com/air/browserapi/air.swf. Подробнее см. в разделе Загрузка файла air.swf..

[...]

Метод installApplication () может работать только при вызове в обработчике события для пользовательского события, например щелчка мыши.

Метод installApplication () выдает ошибку, если в браузере не установлена ​​необходимая версия Flash Player (обновление 3 версии 9).

...