ExternalInterface.addcallback

ExternalInterface.addcallbackExternalInterface.addcallbackはFlash(swf)とHTML(JavaScript)を連携させる場合に使う。
JavaScriptから任意のタイミングでswfの関数を呼び出し、引数を得ることができる。

今回はhtml上のボタンから、JavaScript上の関数(as3sendToActionScript)を実行し、ActionScript上の関数を実行するものを作ってみた。
ボタンをクリックすると、Flash内の赤丸が移動する。

以下、実行例とダウンロードファイル一式

 
↓AS2版

 
↓AS3版

 
↓html側のJavaScript

 
ファイル一式 >>ダウンロード
 

【関連】
ExternalInterface.call(ASからJSを呼び出す)
http://www.mztm.jp/2009/05/24/externalinterfacecall/

【参考】ExternalInterface – ActionScript 3.0 言語およびコンポーネントリファレンス
http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/flash/external/ExternalInterface.html

swf内だけで完結する動作ではないので、どうしてもブラウザ側との相性の問題がでてくる。
ハマり報告がいくつかあるの確認すること。

ExternalInterfaceにハマる
http://www.ironhearts.com/diary/archives/001473.html

Flashが何故かうまく動かない時に疑うべき8つの要素
http://blog.flair4.jp/2009/03/flash-debug-pattern.html

ExternalInterfaceでActionScriptの関数呼び出し失敗への対策
http://blog.katsuma.tv/2008/02/externalinterface_error.html
> 「*external*」な名前にしておかないとIEでコケる場合があります。
> ExternalInterface.addCallbackが確実に完了してから呼び出す

【余談】
作っている段階でFlashCS3でパブリッシュして意図通りに動いたものが、FlashCS4でパブリッシュすると動かない、ということがあった。これは、コードの記述ミスだった。

誤:private var wasSuccessful:* = ExternalInterface.addCallback(”JS2AS”, fn);
正:ExternalInterface.addCallback(”JS2AS”, fn);

返り値のないメソッドに対して、返り値を取得しようとしていた。
CS3ではaddCallbackは動き返り値に関しては無視されるが、CS4ではエラーログも出さずに単に動かない、という現象になった。
CS3とCS4でミスの許容度が異なるようだ。

3 Comments

Comments are closed.