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>
////////////////////////////////////////////////////////
カラテと申します。
自分も今同じところでつまっています。
HTMLへのobject/embedタグ貼り付けスクリプトを、サンプルのAC_RunActiveContentからSWFobjectに変更してみたところ、今度はFirefoxで(JS→AS/AS→JS共に)確認できるがIEでは全く動作せず、という結果になりました。
カラテさん、こんばんわ。
そうですか。ということはブラウザ判定できれば何とかなりそうですね。
ただしSafariとか他のブラウザの問題もありますから、業務用とかブラウザを限定したものであればいいんですよね。
ファイルアップロードも若干問題あるようですし、時期バージョンに期待したほうがいいですかね。