|
Adobe Flash非公式テクニカルノート
FlashVarsでHTMLからSWFに変数を渡す
ID: FN0901001 |
Product: Flash CS3 and above |
Platform: All |
Version: 9 and above/ActionScript 3.0 |
HTMLドキュメントにFlashVarsプロパティを指定すると、SWFファイルに変数を渡すことができます。なお、本稿では、ActionScript 3.0を使った方法でご説明します[*1]。
1. FlashVarsプロパティを使った変数の指定
FlashVarsプロパティは、HTMLドキュメントに<object>および<embed>要素で指定します。SWFファイルtest.swfに変数myVarに値"test"を設定して渡したいときは、つぎのように記述します[*2]。
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0"
width="240" height="180" id="test" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="allowFullScreen" value="false" />
<param name="movie" value="test.swf" />
<param name="FlashVars" value="myVar=test" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<embed src="test.swf" FlashVars="myVar=test"
quality="high" bgcolor="#ffffff" width="240" height="180" name="test" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer_jp" />
</object>
|
[*2] 「変数=値」の組を複数指定するには、それらをアンパサンド(&)で結びます。たとえば、変数myVar0に値"test0"、変数myVar1に値"test1"を設定して、ふたつの変数をSWFファイルに渡すには、FlashVarsプロパティをつぎのように指定します。
[object要素]
<param name="FlashVars" value="myVar0=test0&myVar1=test1" />
[embed要素]
FlashVars="myVar0=test0&myVar1=test1"
|
2. 変数をLoaderInfo.parametersプロパティから取出す
SWFファイルに読込まれた変数は、メインタイムラインのDisplayObject.loaderInfoプロパティのLoaderInfo.parametersプロパティに設定されます[*3]。このプロパティは読取り専用のObjectインスタンスです。したがって、for-inループにより変数とその値を取出すことができます。
前述「1. FlashVarsプロパティを使った変数の指定」で渡された変数をSWFファイルtest.swf内で取出すには、メインタイムラインのフレームアクションにつぎのスクリプト001を記述します。
スクリプト001■LoaderInfo.parametersプロパティから変数と値を取出す
// ActionScript 3.0
// フレームアクション
var output_txt:TextField = new TextField();
var result_str:String = "";
var flashVars:Object = loaderInfo.parameters;
addChild(output_txt);
output_txt.autoSize = TextFieldAutoSize.LEFT;
// trace(flashVars); // 確認用
for (var name_str:String in flashVars) {
result_str += name_str + " = " + flashVars[name_str] + "\n";
}
output_txt.text=result_str;
|
上記スクリプト001は、LoaderInfo.parametersプロパティのObjectインスタンスからfor-inループにより変数とその値を取出し、タイムライン上に作成したTextFieldインスタンスにその結果を「変数=値」のかたちで表示します。
図001■FlashVarsで渡された変数と値をTextFieldに表示
*画像をクリックすると、サンプルファイルが開きます。
[*3] ActionScript 2.0/1.0では、変数がメインタイムラインに設定されました。ActionScript 3.0では、変数を収めるオブジェクトがLoaderInfo.parametersプロパティとして実装されました。なお、Text Layout Frameworkを使ったときは、LoaderInfoオブジェクトの参照先に注意が必要のようです。詳しくは、RIAxDNP「【TLF】ハマったポイントと回避方法」の3「FlashCS5でTLFを使うと、FlashVarsの値がとれない」をご覧ください。
|
3. AC_FL_RunContent()関数に引数を加える
Internet Explorerのアクティブ化に対応するため、HTMLドキュメントでAC_FL_RunContent()関数を用いることがあります(図001)。その場合、FlashVarsプロパティとその値は、このAC_FL_RunContent()関数の引数に加えなければなりません[*4]。
図002■HTMLドキュメントに加えられたAC_FL_RunContent()関数
AC_FL_RunContent()関数には、プロパティ名"FlashVars"とその値となる「変数=値」の指定を、それぞれ文字列でつぎのようにふたつの引数として加えます[*5]。関数の引数はプロパティ名とその値が交互に並んでいればよく、何番目に加えても構いません。
AC_FL_RunContent(
'codebase', 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0',
'width', '240',
'height', '180',
'src', 'test',
'quality', 'high',
'pluginspage', 'http://www.adobe.com/go/getflashplayer_jp',
'align', 'middle',
'play', 'true',
'loop', 'true',
'scale', 'showall',
'wmode', 'window',
'devicefont', 'false',
'id', 'test',
'bgcolor', '#ffffff',
'name', 'test',
'menu', 'true',
'allowFullScreen', 'false',
'allowScriptAccess','sameDomain',
'movie', 'test',
'FlashVars', 'myVar=test',
'salign', ''
);
|
[*4] FLASH-japan「リンクされたURLの引数を変数として受け取る」および「flashVarsプロパティを使用した要求データの受け渡し」参照。
[*5] Dreamweaverでは、SWFコンテンツを右クリックして[パラメータ]ダイアログボックスが開くことができます(図003)。このダイアログボックスでFlashVarsとその値を追加すれば、HTMLドキュメントの<noscript>要素の<object>と<embed>要素、およびAC_FL_RunContent()関数の引数に、それぞれFlashVarsプロパティが設定されます。
図003■Dreamweaver CS3の[パラメータ]ダイアログボックス
|
作成者: 野中文雄
更新日: 2011年4月18日 注[*3]にText Layout Frameworkが使われた場合の注意を追加。
作成日: 2009年1月12日
Copyright ©
2001-2009 Fumio Nonaka. All rights reserved.
|