2008年7月23日 星期三

[HOWTO] HTML/JavaScript 如何傳參數給SWF

Q:
假設我有一個變數叫MY_VAR,我希望由外部HTML/JavaScript傳入MYFLASH.swf中來改變顯示畫面,要如何撰寫?


A:
在HTML中的寫法:

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" name="SWF_NAME" width="800" height="600" align="middle" id="SWF_ID">
<param name="allowScriptAccess" value="sameDomain" />
<param name="allowFullScreen" value="true" />
<param name="movie" value="MYFLASH.swf" />
<param name="FlashVars" value="MY_VAR1=MY_VALUE1&MY_VAR2=MY_VALUE1" />
<param name="quality" value="high" />
<param name="bgcolor" value="#CCCCCC" />
<param name="sacle" value="exactfit">
<embed src="MYFLASH.swf" width="800" height="600" align="middle" quality="high" bgcolor="#CCCCCC" name="SWF_NAME" allowScriptAccess="sameDomain" allowFullScreen="true" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" scale="exactfit" />
</object>

要傳入的變數寫在 param name="FlashVars" 後的 value 屬性中。傳入的變數與變數間用&分開(即MY_VAR1=MY_VALUE1&MY_VAR2=MY_VALUE2)。同時,要注意傳入的變數值(MY_VALUE1與MY_VALUE2)必須要用 urlencode(在PHP是 urlencode(), JSP是response.encodeURL()) 相關函式將字編碼成 MIME。



使用Flash CS3發佈的Javascript:AC_RunActiveContent.js 中的寫法:

<script language="javascript">
if (AC_FL_RunContent == 0) {
alert("這個頁面必須具備 AC_RunActiveContent.js。");
} else {
AC_FL_RunContent( 'codebase','http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0',
'name','SWF_NAME','width','800','height','600','align','middle','id','SWF_ID',
'src','MYFLASH','quality','high','bgcolor','#CCCCCC','allowscriptaccess','sameDomain',
'allowfullscreen','true','pluginspage','http://www.macromedia.com/go/getflashplayer',
'scale','exactfit','movie','MYFLASH','FlashVars','MY_VAR1=MY_VALUE1&MY_VAR2=MY_VALUE2' ); //end AC code
}
</script>

基本上AC_FL_RunContent()中的值都是兩個兩個對應...所以 'movie' 後的下一個參數位置就是你的.swf名稱(即MYFLASH),而你要傳進去給 MYFLASH.swf(的ActionScript程式參數) 的眾多變數參數(MY_VAR1、MY_VAR2)就設定在'FlashVars'後的下一個位置。



而Flash的部分,在ActionScript 3中,我用以下程式來取得由外部傳入的變數MY_VAR1與MY_VAR2:

var strVar1:String = String(root.loaderInfo.parameters.MY_VAR1); //依需求轉型成String
var strVar2:int = int(root.loaderInfo.parameters.MY_VAR2); //或int



參考資料:
Adobe TechNote : tn_12701
Adobe TechNote : tn_16417

沒有留言: