JavaScript + FlashVarsでswfにGET値を渡す
例えば、
http://www.hoge.com/index.html
でswfを読み込んでいて、
http://www.hoge.com/index.html?aaa=bbb
でアクセスした時と、
http://www.hoge.com/index.html?aaa=ccc
でアクセスした時とでswfの表示を変えたい時、
- 値をgetで渡す
- サーバサイドスクリプトは使わない
- 1つのswfファイルで処理する(分岐ごとに複数用意しない)
以上の条件で実現するにはどうしたらよいか調べたところ、
こんな感じになりました。
- JavaScriptでGET値を取得
- JavaScriptでObject要素、Embed要素を出力してFlashVarsでswfに値を渡す
- ActionScriptで値を読み込んで表示を切替え
JavaScript + FlashVarsでswfにGET値を渡すサンプル
ActionScript
(フレームアクション)
//aaa=bbbの場合 if(_level0.aaa == "bbb"){ ※処理を記述 } //aaa=cccの場合 if(_level0.aaa == "ccc"){ ※処理を記述 } //いずれでもない場合 else{ ※処理を記述 }
JavaScript
//GET値を取得し、連想配列に格納 var qsParm = new Array(); function retrieveGETqs() { var query = window.location.search.substring(1); var parms = query.split('&'); for (var i=0; i<parms.length; i++) { var pos = parms[i].indexOf('='); if (pos > 0) { var key = parms[i].substring(0,pos); var val = parms[i].substring(pos+1); qsParm[key] = val; } } } //swf読み込み部分を出力 function swfView(){ retrieveGETqs(); document.write("<object classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" codebase=\"http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0\" width=\"770\" height=\"650\" id=\"hoge\" align=\"middle\">"); document.write("<param name=\"allowScriptAccess\" value=\"sameDomain\" />"); document.write("<param name=\"movie\" value=\"hoge.swf\" />"); document.write("<param name=\"quality\" value=\"high\" />"); document.write("<param name=\"bgcolor\" value=\"#ffffff\" />"); if(qsParm["aaa"] != "" && qsParm["aaa"] != "undefined"){ document.write("<embed src=\"hoge.swf\" quality=\"high\" bgcolor=\"#ffffff\" width=\"770\" height=\"650\" name=\"hoge\" align=\"middle\" allowScriptAccess=\"sameDomain\" type=\"application/x-shockwave-flash\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\" FlashVars=\"aaa=" + qsParm["aaa"] + "\" />"); document.write("<param name=\"FlashVars\" value=\"aaa=" + qsParm["aaa"] + "\" />"); } else{ document.write("<embed src=\"hoge.swf\" quality=\"high\" bgcolor=\"#ffffff\" width=\"770\" height=\"650\" name=\"hoge\" align=\"middle\" allowScriptAccess=\"sameDomain\" type=\"application/x-shockwave-flash\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\" />"); } document.write("</object>"); }
HTML
<script type="text/javascript">swfView();</script> <noscript> <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" width="770" height="650" id="hoge" align="middle"> <param name="allowScriptAccess" value="sameDomain" /> <param name="movie" value="hoge.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" /><embed src="hoge.swf" quality="high" bgcolor="#ffffff" width="770" height="650" name="hoge" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /> </object> </noscript>
参考URL
- JavascriptでGETリクエスト値を取得する - Archiva
- JavaScriptでGET値を取得するスクリプトはこちらのを使わせていただきました。感謝!
- blog.keitap.com: FlashVars
- swfに値を渡す方法は2種類なんですね。今回は、実際に作業するswfファイルが重く、書き換えが必要なものではなかったのでFlashVarsを使用しました。
- http://quality.ekndesign.com/archives/2006/07/externalinterfa.html
- ExternalInterfaceクラスというものもあるそうです。今回はPleyer7でしたので、FlashVarsにしましたが、こちらも別の機会にチャレンジしてみよっと!
- http://www.adobe.com/jp/support/flash/ts/documents/fl0284.html