ActionScript3.0覚書 ブラウザからAIR起動

久しぶりに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>

Add a Comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください