2012-09-11
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>