JavaScript関数の呼び出し
swfからJavaScriptの関数を呼び出すには「ExternalInterface」を使います。
サンプル(ExternalInterfaceSample.as):
package { import flash.display.*; import flash.external.*; /** * メインクラス */ public class ExternalInterfaceSample extends Sprite { public function ExternalInterfaceSample(){ // javascript のAPIを実行し、戻り値を得る。 var name:String = ExternalInterface.call( "getKittenName", 10 ); trace(name); } } }
swfを貼り付けるhtml:
<html> <head></head> <body> <div id="stdout"></div> <!-- swf --> <object id='externalInterfaceSampleSwf' classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0' height='500' width='500'> <param name='src' value='ComplexDataTypeSender.swf'/> <param name='flashVars' value=''/> <embed name='externalInterfaceSampleSwf' src='ExternalInterfaceSample.swf' pluginspage='http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash' height='100%' width='100%' flashVars=''/> </object> <script> var stdout = document.getElementById( "stdout" ); /** * 実行するjavascriptのAPI */ function getKittenName( age ) { stdout.innerHTML += "mii / " + age; return "mii"; } </script> </body> </html>
ExternalInterfaceのstaticメソッドを実行するだけ。簡単です。
配列やオブジェクトを渡す
引数や戻り値として配列やオブジェクトをやりとりすることもできます。
サンプル(ExternalInterfaceSample.as):
package { import flash.display.*; import flash.external.*; /** * メインクラス */ public class ExternalInterfaceSample2 extends Sprite { public function ExternalInterfaceSample2(){ // javascript のAPIを実行し、戻り値を得る。 var friends:Array = ExternalInterface.call( "getKittenFriends", [ {name:"mii", age:10} ] ); for each ( var f:Object in friends ) { trace( f.name + " / " + f.age ); } } } }
swfを貼り付けるhtml:
<html> <head></head> <body> <div id="stdout"></div> <!-- swf --> <object id='externalInterfaceSampleSwf' classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0' height='500' width='500'> <param name='src' value='ComplexDataTypeSender.swf'/> <param name='flashVars' value=''/> <embed name='externalInterfaceSampleSwf' src='ExternalInterfaceSample2.swf' pluginspage='http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash' height='100%' width='100%' flashVars=''/> </object> <script> var stdout = document.getElementById( "stdout" ); /** * 実行するjavascriptのAPI */ function getKittenFriends( kittens ) { for ( var i = 0; i < kittens.length; i++ ) { stdout.innerHTML += kittens[i].name + " / " + kittens[i].age; } return [ { name:"kuro", age:1 }, { name:"tora", age:2 }, { name:"shiro", age:2 } ]; } </script> </body> </html>
参考:Flex 2 開発 ガイド - ExternalInterface API を使用した Flex から JavaScript へのアクセス