FlashにhtmlからFlashvarsで変数を渡したときに、Flash側から渡された変数名を全部取得する方法はあるでしょうか?


例えば、html側からFlashvars a=1&b=2&c=3と渡されて、Flash側ではどんな変数が渡されたかを知りたいです。
htmlからの変数を増やしても、Flash側の変数名追加の処理を減らしたいと思っているために知りたいと思っています。

回答の条件
  • 1人2回まで
  • 登録:2010/01/06 10:29:51
  • 終了:2010/01/13 10:30:03

回答(1件)

id:yasu-log No.1

clockmaker回答回数30ベストアンサー獲得回数112010/01/06 12:04:17

ポイント60pt

for in 文で値を調べれば、一括で取得することができます。

AS3の場合はドキュメントクラスもしくはルートのフレームアクションで次のスクリプトで取得できます。

trace("--- Flash Vars取得 AS3")
for (var p:String in loaderInfo.parameters)
{
	trace("変数名は" + p + " 値は" + loaderInfo.parameters[p]);
}

AS1/AS2だったら次のスクリプトで取得できます。

trace("--- Flash Vars取得 AS1/AS2")
for (var p in _root)
{
	trace("変数名は" + p + " 値は" + _root[p]);
}

※AS1/2の場合は_rootの他のいらない変数も付いてきそうですが…。

id:dingding

AS1/2を使っていますが、そうするとご指摘の通り、_heightとか_alphaとかまでとれてしまいますよね。_が付かないものだけ見るとかすれば行けるかもしれませんが、_rootは何でもかんでも入っていてマズそうな気がします。

FlashVarsで渡す時点でfval["a"]のようにオブジェクトにできれば、それだけ見るっててもあるんですけどね。ブラウザ依存しそうな気がしてしまいます。

2010/01/07 01:45:55
  • id:yasu-log
    AS1/2の場合はFlashVarsは_rootに格納されるのは仕様なので、致し方ないのかなと思います。
    一般的な対処だと返答にあるとおり、変数をフィルタリングして取捨選択するのがベターだと思います。

    FlashVarsを利用しない場合で取得した_rootのパラメータ一覧を予め作成しておけば、FlashVarsから取得した値がどれかあるか導き出すのは容易だと思います(ただし$versionや_alphaのような予約語の変数名をFlashVarsには使えませんが)

    Flashが再生して一番初めのタイミング(_rootの1フレーム目のアクションの先頭)でFlashVarsを取得しておく処理だけを記述しておけば、他に不要な変数が混じり込むこともないかと思います。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません