サイトトップ

Director Flash 書籍 業務内容 プロフィール

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] ActionScript 2.0を使う場合については、[ヘルプ]の「アプリケーションでのFlashVarsの使用」をお読みください。


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.