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