Flash Externalメモ

Flash ExternalはFlash8より実装されたJavaScriptとFlashの相互の関数を制御するAPI。サンプルはFlash8に入っているのですが自分なりにメモ。サンプルを見ればわかるのですが一方はHTMLのフォームからパラメータを受け取りFlashのActionScriptの関数を実行。もうひとつはFlash側からパラメータをおくり埋め込まれているページのJavaScriptを利用してのフォームのテキストにパラメーターをセット。

fscommandよりは簡単そう。でも実際にテスト(ローカルではNG)するとFireFoxではJavaScriptからFlashの関数は実行できませんでした。IEからではOK。

flash_external_sample.zipをダウンロード


///////////////////////////////////////////
// ActionScriptファイル、Javascript とFlashの連携
//////////////////////////////////////////
import flash.external.*;     //External APIをインポート

/
JavaScriptよりパラメータを受けて実行される関数
* @param str HTMLのフォームより送られるパラメーター
*/
function asFunc(str:String):Void {
    sample_txt.text = "JavaScript: " + str;
}
//先に定義した関数を呼び出すイベントを設定
ExternalInterface.addCallback("asFunc", this, asFunc);

/
 JavaScriptの関数を制御する関数
*/

function doClick(eventObj:Object):Void {
    ExternalInterface.call("jsFunc", out_ti.text);
};

//JavaScriptにセットするためのボタンイベント
send_button.addEventListener("click", doClick);

////////////////////////////////////////////////
// HTML(Javascirpt)側ソース
////////////////////////////////////////////////

//ヘッダー部に設定

<head>
<script language="JavaScript">
<!–
    function thisMovie(movieName) {
        var isIE = navigator.appName.indexOf("Microsoft") != -1;
        return (isIE) ? window[movieName] : document[movieName];
    }
    //Flash側の関数を実行
    function makeCall(str) {
        // ‘extint’はパブリッシュ時に埋め込まれているID
        thisMovie("extint").asFunc(str);
    }
   
    // FlashからJavascriptを実行
    function jsFunc(str) {
        document.inForm.inField.value = "ActionScript: " + str;
    }
// –>
</script>

<script src="Scripts/AC_RunActiveContent.js" type="text/javascript"></script>
</head>
<body bgcolor="#ffffff">
<script type="text/javascript">
AC_FL_RunContent( ‘codebase’,’http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0′,’width’,’330′,’height’,’245′,’id’,’extint’,’align’,’middle’,’src’,’ExtInt’,’quality’,’high’,’bgcolor’,’#ffffff’,’name’,’extint’,’allowscriptaccess’,’sameDomain’,’swliveconnect’,’true’,’pluginspage’,’http://www.macromedia.com/go/getflashplayer’,’movie’,’ExtInt’ ); //end AC code
</script>
<noscript>
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0"
    width="330"
    height="245"
    id="extint"
    align="middle">
  <param name="allowScriptAccess" value="sameDomain" />
  <param name="movie" value="ExtInt.swf" />
  <param name="quality" value="high" />
  <param name="bgcolor" value="#ffffff" />
  <embed src="ExtInt.swf"
    quality="high"
    bgcolor="#ffffff"
    width="330"
    height="245"
    name="extint"
    align="middle"
    allowScriptAccess="sameDomain"
    swLiveConnect="true"
    type="application/x-shockwave-flash"
    pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
</noscript>
<!— Flashへ送信 —>
<form name="outForm" method="POST" action="javascript:makeCall(document.outForm.outField.value);">
  Sending to AS:<br />
  <input type="text" name="outField" value="" />
  <br />
  <input type="submit" value="Send" />
</form>

<!— Flashからセット —>
<form name="inForm" method="POST" action="">
  Receiving from AS:<br />
  <input type="text" name="inField">
</form>

</body>
////////////////////////////////////////////////////////

2 thoughts on “Flash Externalメモ

  1. カラテ

    カラテと申します。
    自分も今同じところでつまっています。
    HTMLへのobject/embedタグ貼り付けスクリプトを、サンプルのAC_RunActiveContentからSWFobjectに変更してみたところ、今度はFirefoxで(JS→AS/AS→JS共に)確認できるがIEでは全く動作せず、という結果になりました。

    返信
  2. BAL

    カラテさん、こんばんわ。
    そうですか。ということはブラウザ判定できれば何とかなりそうですね。
    ただしSafariとか他のブラウザの問題もありますから、業務用とかブラウザを限定したものであればいいんですよね。
    ファイルアップロードも若干問題あるようですし、時期バージョンに期待したほうがいいですかね。

    返信

カラテ にコメントする コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


This site uses Akismet to reduce spam. Learn how your comment data is processed.