JavaScriptからFlexのAPIを呼び出すサンプル
FlexからJavaScript関数を呼び出す場合と同様、ExternalInterfaceを使います。
呼び出される側のswf :
package { import mx.utils.*; import flash.display.*; import flash.text.*; import flash.external.*; // JavaScriptからのメソッド呼び出しを受け付けるサンプル public class Sample extends Sprite { private var stdout:TextField; public function Sample(){ stdout = new TextField(); stdout.width = 500; stdout.height = 500; addChild(stdout); // show メソッドを公開。 ExternalInterface.addCallback( "show", show ); } private function show( value:Object ):void { this.stdout.text = ObjectUtil.toString( value ); } } }
呼び出す側のhtml :
<html> <head> <script> // swfのメソッドを呼び出す関数。 function show(value) { // swfを取得し、公開メソッドを呼び出せばOK。 // swfの取得先はブラウザごとに異なるらしいので分岐が必要。 if (navigator.appName.indexOf("Microsoft") != -1) { window["swf"].show(value); } else { document["swf"].show(value); } } </script> </head> <body> <!-- メニュー。クリックでswfのAPIを呼び出す。 --> <div> <a href="javascript:show({string:'aaa',int:10});">aaa</a> | <a href="javascript:show({string:'bbb',int:3});">bbb</a> | <a href="javascript:show({string:'ccc',int:5});">ccc</a> </div> <!-- swf --> <object id='swf' 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='bin/sample.swf'/> <param name='flashVars' value=''/> <embed name='swf' src='bin/sample.swf' pluginspage='http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash' height='100%' width='100%' flashVars=''/> </object> </body> </html>