- ベストアンサー
HTMLからFlashで作成したswfファイルを起動して変数を渡す方法
HTMLからFlashで作成したswfファイルを起動して変数を渡す方法についてです。 その際、フレームで定義した領域にswfを読み込みたいのですが、その場合、どのようにすれば変数をswfに渡すことができるでしょうか? FlashVars属性をobjectタグやembedタグに追加するようにマニュアルには記載がありますが、フレーム内にswfを読み込む場合の変数の渡し方がわかりません。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> フレーム内にswfを読み込む そういうことは普通はしてはならないことになってます。 だからFlashVarsなどの方法しかないのだと思います。 ブラウザにSWFを直表示しても何も表示されない環境も多々ある ブラウザにSWFを直表示すると落ちるブラウザもある その他 細かいレイアウト調節などができない JavaScriptとの連携が不可能になる などが「してはならない」理由です。 以下は「してはならない」ということがわかっていてあえてする場合の回答です。 ActionScript 2.0(1.0) では MovieClip クラスの _url プロパティで SWF のURLを取得できます。 たとえば,あるフレームに <FRAME name="○○" src="△△.swf?a=aiueo"> のようにして「△△.swf」 をクエリ文字列付きで表示させます。 その「△△.swf」のフレーム1には次のように書いておきます。 ----------------- //swfのURLを「?」でsplitして配列url_arr を作成 var url_arr:Array = this._url.split("?"); // クエリの文字列を変数 query_str に取得 var query_str:String = url_arr[url_arr.length-1]; //テキストフィールド「url_txt」を作成 this.createTextField("url_txt", 0, 10, 5, 360, 20); //「url_txt」にクエリ文字列を表示 url_txt.text = query_str; ----------------- これでクエリ文字列の部分「a=aiueo」がSWF内で取得できます。 テキストフィールドは検証するためのもので実際は関係ありません。 ※ウェブサーバ上にアップした場合検証できます。 ローカルPC内のSWFでは検証不可だと思います。 ActionScript 3.0 では loaderInfo クラス の url プロパティで SWF のURLを取得できます。 上のスクリプトと同様のものを フレーム1 に書くなら次のようになります。 ----------------- //swfのURLを「?」でsplitして配列url_arr を作成 var url_arr:Array = loaderInfo.url.split("?"); // クエリの文字列を変数 query_str に取得 var query_str:String = url_arr[url_arr.length - 1]; //テキストフィールド「url_txt」を作成 var url_txt:TextField = new TextField(); url_txt.x = 10; url_txt.y = 5; url_txt.width = 300; url_txt.height = 20; //「url_txt」にクエリ文字列を表示 url_txt.text = query_str; //「url_txt」をrootに配置 this.addChild(url_txt); ----------------- ※同じくローカルPCのSWFでは検証不可だと思います。 このような感じでURLからクエリを取りだして それを操作すれば使うことはできると思います。 データの形はパースしやすいようにすれば良いです。 例えば <FRAME name="○○" src="△△.swf?ABC&DE&FG"> のようにし ABC&DE&FGH を 「&」 で split して ["ABC","DE","FG"] という配列の要素で取得するなど 方法は色々あると思います。
その他の回答 (1)
- BlurFiltan
- ベストアンサー率91% (1611/1754)
#1です。 > 「直表示」ではない「表示」とはどのような方法を指すのでしょうか? 普通通りobjectタグやembedタグでHTMLに貼り付けるということです。 とにかくブラウザとしては ActiveXコントロール を1つに定めないとならないわけで, その自動判別プログラムがないブラウザなどは表示できません。 SWF を ブラウザ に直接表示(フレーム内に直接表示も含む)できるのは, そのブラウザが自動的に簡易 objectタグ を生成して自動補完するからのようです。 普通ではない場合 とは, 携帯電話用のFlashを作成して そのFlashを携帯電話でインタラクティブ再生させるときです。 その場合に限って SWF を携帯電話に直表示させます。
お礼
よくわかりました。ありがとうございました。
補足
いつも御丁寧にありがとうございます。本当に助かっています。 この件については、htmlからswfに変数を引き渡すようなことはせずに、swf内からsendAndLoadでサーバー側のセッション変数の読み込みや書き込みをすることを今は検討しています。これなら少なくともサーバー側とのデータのやりとりについては問題ないですよね? それから「フレームにSWFを読み込むことはしない」理由について了解しました。 フレームを使うことの利点(たとえばユーザ操作によってブラウザの大きさが変わった時に自動的にSWF画面の大きさを縦横比率を変えずに自動的に調整してくれるなど)よりも不利益の方が多いということですね? ただ、「ブラウザにSWFを直表示する」という表現がよく理解できませんでした。 「直表示」ではない「表示」とはどのような方法を指すのでしょうか? すみませんけどよろしくお願いします。