以下代码按预期工作:当用户单击该按钮时,安装程序会自动启动。
<?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功能。
为什么第二段代码不起作用?是否需要用户交互?如果是这样的话有什么办法吗?
答案 0 :(得分:1)
是的,AIR安装程序需要用户交互(用户事件)才能工作。不幸的是,我似乎无法找到关于此的官方信息,但我在过去遇到过这个问题。出于安全原因,它是以这种方式构建的,因此任何应用都无法在后台安装不需要的应用。
编辑:找到它:http://livedocs.adobe.com/flex/3/html/help.html?content=distributing_apps_3.html
从浏览器安装AIR应用程序
SWF文件可以通过调用来安装AIR应用程序 从加载的air.swf文件中的installApplication()方法 http://airdownload.adobe.com/air/browserapi/air.swf。有关详情,请参阅 加载air.swf文件。
[...]
installApplication()方法只能在调用时运行 用户事件的事件处理程序,例如鼠标单击。
如果需要,installApplication()方法会抛出错误 版本的Flash Player(版本9升级3)未安装在 浏览器。