- 2009年8月12日 17:35
- ActionScript 3.0 | JSFL
以前のエントリーでも、MMexecuteに関してはとりあげました。では、JSFL側が、SWFPanelとやりとりしたい場合はどうでしょう。これには、JSFLのswfPanelオブジェクトには、callメソッドを使用します。
SWFPanel側での定義
ここではAS3を使用します。
AS3では、例えば表示されているHTMLに記述されたJSから、メソッドを呼び出すことができますよね。そう、ExternalInterfaceです。このExternalInterfaceは、実は使用用途はブラウザに限りません。SWFを表示しているオブジェクトをコンテナと呼びますが、そのコンテナ側のなんらかのスクリプトから、AS3のメソッドを呼び出すことが出来るわけです。JSFLとSWFPanelの場合は、Flash CS4がコンテナになり、ExternalInterface.addCallBackで登録されたメソッドを、JSFL側から呼び出すことが出来ます。
ExternalInterface.addCallbackの使い方は、第一引数に呼び出す際に使用する識別子をストリングで、第二引数で実際に関連づけるメソッドを設定します。
ExternalInterface.addCallback("callMySWF", callMeFromJavascript);
JSFL側の定義
JSFL側では、まずコンテナからメソッドが定義されているSWFPanelを探す必要があります。そう、SWFPanelは複数存在する可能性がありますからね。SWFPanelは、fl.swfPanelsとして、flオブジェクトに配列で格納されています。SWFPanelの特定には、swfPanel.nameを使用して、SWFPanelの名前をとるしか有効な手段はないようです。 swfPanelを特定したら、swfPanel.callメソッドでSWFPanelに登録されているメソッドを呼びだします。第一引数には識別子を、第二引数にはメソッドで使用する引数を渡します。
渡される引数の注意点
- 引数値はStringに強制変換される
- 引数値に改行コードを(\n)を含むことはできない。
for(var i=0;i<fl.swfPanels.length;i++){
var swfpanel = fl.swfPanels[i];
if(swfpanel.name == "hogehogePanel"){
swfpanel.call("setLog",value)
}
}



