株式会社ライブキャストロゴ 株式会社ライブキャスト

HTMLとJavaScriptベースのAIRアプリやflash(swf)からJavaScriptを呼び出す方法は、いろいろと紹介されています。

例えば、、、

ActionScript 3.0 から JavaScript を呼び出すって話。 (InnerChild triumphs!!)
ExternalInterfaceクラスを利用すればいいみたいです。

ですが、Flash Builder(4.0よりFlex Builderから名称が変わりました)で作成した、MXMLとasファイルから構成されているようなAIRアプリから、JavaScriptを実行する方法はあまり見かけたことがありませんでした。

そこで、こんな方法を思いつきましたので、ご紹介したいと思います。

HTMLLoderクラスを使います。

こんな感じです。

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
					   xmlns:s="library://ns.adobe.com/flex/spark"
					   xmlns:mx="library://ns.adobe.com/flex/mx" creationComplete="init()" width="300" height="300">
	<fx:Declarations>
		<!-- 非ビジュアルエレメント (サービス、値オブジェクトなど) をここに配置 -->
	</fx:Declarations>
	<s:Button x="115" y="138" label="Call" id="btnCall" click="onCallClick()"/>
	<fx:Script>
		<![CDATA[
			private function onCallClick():void {
				var script:HTMLLoader = new HTMLLoader();
				var strScript:String = "<script type='text/javascript'>alert('from AIR');</script>";

				script.loadString(strScript);
			}
		]]>
	</fx:Script>
</s:WindowedApplication>

ボタンが1つだけある画面で、そのボタンをクリックするとスクリプトをロードするので、結果JavaScriptが実行されます。

callee

かなり強引ですが、できました。。。
ほかに良い方法をご存知の方、いらっしゃいましたら、教えてほしいです!