2010/06/24
カテゴリ : Flex
Flash
JavaScript
Tech
ActionScript
【Flex】FlexからJavascriptを実行してみる
こんにちは、橋本です。
今日は、FlexからJavascript関数へアクセスする方法についてお話したいと思います。
FlexからJavascriptへアクセスするためには、ExternalInterface APIを使います。
使い方は非常に簡単です。call()メソッドを使ってラッパーのJavascriptを呼び出すだけです。
Javascriptの関数に引数を渡したり、Javascript側から戻り値を受け取ることも可能です。
簡単なコードを書いて、実際に使ってみましょう。
Flexコード
ラッパーにScriptタグを追加して、Flexで呼び出す関数を設定します。
実行結果がこちらです。
また、オブジェクトや配列をそのまま渡すことも可能です。
先程のソースを少し修正します。
javascriptの方も、オブジェクトを受け取るように変更
実行結果
また、無名関数をFlex内で直接記述して実行することも可能です。
さきほどのコードを、無名関数を使うように変更します。
実行結果は先程の例と同様になります。
無名関数を使うことで、適用の幅が広がると思います。
非常に簡単ですので、試してみてください。
今日は、FlexからJavascript関数へアクセスする方法についてお話したいと思います。
FlexからJavascriptへアクセスするためには、ExternalInterface APIを使います。
使い方は非常に簡単です。call()メソッドを使ってラッパーのJavascriptを呼び出すだけです。
Javascriptの関数に引数を渡したり、Javascript側から戻り値を受け取ることも可能です。
簡単なコードを書いて、実際に使ってみましょう。
Flexコード
- <?xml
version="1.0" encoding="utf-8"?> - <mx:Application
xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" minWidth="955" minHeight="600"> <mx:Script> <![CDATA[ import flash.external.*; import mx.controls.Alert; public function setWrapperTitle(title:String):void { var ret:String; if (ExternalInterface.available) { ret = ExternalInterface.call("setTitle",title); } else { ret = "Fault"; } Alert.show(ret); } protected function execBtn_clickHandler(event:MouseEvent):void { this.setWrapperTitle(this.titleInput.text); } ]]> </mx:Script> <mx:Panel id="hoge" width="280" height="150" x="{this.width / 2 - hoge.width / 2}" y="{this.height / 2 - hoge.height / 2}" title="タイトル変更" > <mx:Form> <mx:FormItem label="タイトル:"> <mx:TextInput id="titleInput"/> </mx:FormItem> </mx:Form> <mx:ControlBar width="100"> <mx:Spacer width="100%"/> <mx:Button id="execBtn" label="変更" click="execBtn_clickHandler(event)" /> </mx:ControlBar> </mx:Panel> - </mx:Application>
ラッパーにScriptタグを追加して、Flexで呼び出す関数を設定します。
- <script
language="JavaScript" type="text/javascript"> function setTitle(title) { window.document.title = title; return "success"; } - </script>
実行結果がこちらです。
また、オブジェクトや配列をそのまま渡すことも可能です。
先程のソースを少し修正します。
- <?xml
version="1.0" encoding="utf-8"?> - <mx:Application
xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" minWidth="955" minHeight="600"> <mx:Script> <![CDATA[ import flash.external.*; import mx.controls.Alert; public function setWrapperTitle(obj:Object):void { var ret:String; if (ExternalInterface.available) { ret = ExternalInterface.call("setTitle",obj); } else { ret = "Fault"; } Alert.show(ret); } protected function execBtn_clickHandler(event:MouseEvent):void { var obj:Object = { title1: this.titleInput1.text, title2: this.titleInput2.text }; this.setWrapperTitle(obj); } ]]> </mx:Script> <mx:Panel id="hoge" width="300" height="180" x="{this.width / 2 - hoge.width / 2}" y="{this.height / 2 - hoge.height / 2}" title="タイトル変更" > <mx:Form> <mx:FormItem label="タイトル1:"> <mx:TextInput id="titleInput1"/> </mx:FormItem> <mx:FormItem label="タイトル2:"> <mx:TextInput id="titleInput2"/> </mx:FormItem> </mx:Form> <mx:ControlBar width="100"> <mx:Spacer width="100%"/> <mx:Button id="execBtn" label="変更" click="execBtn_clickHandler(event)" /> </mx:ControlBar> </mx:Panel> - </mx:Application>
javascriptの方も、オブジェクトを受け取るように変更
- <script
language="JavaScript" type="text/javascript"> function setTitle(obj) { window.document.title = obj.title1 + obj.title2; return "success"; } - </script>
実行結果
また、無名関数をFlex内で直接記述して実行することも可能です。
さきほどのコードを、無名関数を使うように変更します。
- public
function setWrapperTitle(obj:Object):void { var ret:String; if (ExternalInterface.available) { ret = ExternalInterface.call( "function(obj)" + "{" + "window.document.title = obj.title1 + obj.title2;" + "return 'success';" + "}" , obj); } else { ret = "Fault"; } Alert.show(ret); }
実行結果は先程の例と同様になります。
無名関数を使うことで、適用の幅が広がると思います。
非常に簡単ですので、試してみてください。
コメント
コメントフォーム
トラックバックURI
最近の記事
システム開発エンジニア募集! [2012年02月03日 : 小林有佳]
OpenVPNで細々便利な設定 [2012年01月31日 : 門脇優児]
【iOS】Viewの開発・デバッグに役立つ色々 [2012年01月23日 : 中川善樹]
PHPDocumentorの利用方法まとめ [2012年01月19日 : 笹亀弘]
Google Chart Toolsを使ってサイトマップを描こう! [2011年12月21日 : 志田仁美]
stumpwm設定v2 [2011年12月19日 : 門脇優児]
Mashup Awards 7の授賞式が行われました [2011年12月16日 : 中川善樹]
社員旅行に行きました [2011年12月12日 : 大橋寛子]
iCloud風のアイコンを作成する(Fireworks) [2011年12月07日 : 和田記光]
iScroll4でネイティブに近いスマホ向けHTMLページを作成する [2011年12月02日 : 松田惇]













大変参考になりました。
これからも、良い情報の発信をしていだければと思います。
ありがとうございました。
仕様書作成係
http://www.hotdocument.net/