久しぶりにActionScriptをやった。
ブラウザからローカルにインストールされているAIRアプリを起動する方法。
起動時にブラウザを閉じる処理を入れているけれど、これだと確認ダイアログが出てくるので、実際は別のJavaScriptを読んでいる。
launchApplicationは、マウスクリックイベントとかでしか動かない。
dispatchEventとかでマウスクリックイベントを無理やり呼び出してみたけど、launchApplicationだけ動かなかった。(他の行は動いてんのにぃ・・・)
package {
import flash.net.URLRequest;
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.system.LoaderContext;
import flash.system.ApplicationDomain;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.text.TextField;
import flash.text.TextFormat;
import flash.display.Sprite;
import flash.external.ExternalInterface;
import flash.events.EventDispatcher;
[SWF(width=600,height=120,backgroundColor=0xffffff)]
public class Main extends Sprite {
private var air_url:URLRequest = new URLRequest("http://airdownload.adobe.com/air/browserapi/air.swf");
private var air_swf:Object = null;
private var appID:String = "xxxxxxxxxx";
private var pubID:String = "";
private var args:Array;
private var tx1:TextField = new TextField();
private var btn:Sprite = new Sprite();
public function Main() {
tx1.defaultTextFormat = new TextFormat("", 12, 0x0033ff, true);
tx1.autoSize = "left";
tx1.x = 0;
tx1.y = 10;
tx1.width = 600;
tx1.selectable = false;
addChild(tx1);
// air.swf起動
var loader_obj:Loader = new Loader();
var info:LoaderInfo = loader_obj.contentLoaderInfo;
var loader_context:LoaderContext = new LoaderContext();
loader_context.applicationDomain = ApplicationDomain.currentDomain;
info.addEventListener(Event.INIT , loadInit);
loader_obj.load(air_url,loader_context);
}
// 初期状態
private function loadInit(e:Event):void {
air_swf = e.target.content;
try {
tx1.text = "しばらくお待ちください。" ;
air_swf.getApplicationVersion( appID, pubID, getVersion);
} catch( err:Error ) {
tx1.text = err.message ;
}
}
// バージョン確認
private function getVersion(version:String):void {
if (version == null) {
tx1.text = "アプリがインストールされていません。" ;
} else {
tx1.text = "下のボタンをクリックして、アプリを起動してください。" ;
btn = createButton();
addChild(btn);
btn.addEventListener(MouseEvent.CLICK,function(e:MouseEvent):void{
air_swf.launchApplication( appID, pubID, args);
ExternalInterface.call("window.close()");
});
}
}
// ボタン生成
private function createButton():Sprite{
var tx:TextField = new TextField();
var btn:Sprite = new Sprite();
tx.width = 100;
tx.defaultTextFormat = new TextFormat("", 20, 0xffffff, true);
tx.text = " 起動 ";
tx.autoSize = "center";
tx.x = 0;
tx.y = 8;
tx.selectable = false;
btn.addChild(tx);
btn.graphics.lineStyle(1, 0xBBBBBB);
btn.graphics.beginFill(0x9933ff);
btn.graphics.drawRoundRect(0, 0, tx.width, 40, 20, 20);
btn.graphics.endFill();
btn.x = 100;
btn.y = 50;
return btn;
}
}
}
appIDには起動させるAIRのアプリIDを設定。
また、起動時に引数を渡したいときは、launchApplicationの3つめの引数にセットしておく。
起動させるAIR側は、ブラウザからの起動を可能にするため、(xxx)-app.xmlのallowBrowserInvocationタグ内をtrueにセットしておく。
<allowBrowserInvocation>true</allowBrowserInvocation>