別のhtml上のswfの任意のフレームへジャンプ
◎ HTMLに SWF が貼ってある普通の場合の方法
--- ファイル構造 ---------------------------
サーバ上の任意のディレクトリ
├ 01.html ( 01.swf が貼ってある )
├ 01.swf
├ 02.html ( 02.swf が貼ってある )
└ 02.swf
--- 「01.html」 の説明 ---------------------
「01.html」 は,普通に作る。
「01.swf」を貼り付けるだけ。
--- 「01.swf」 の説明 ---------------------
「02.html」に getURL したときに,
その「02.html」に貼ってある「02.swf」を指定フレームラベルに進めるためのボタンのスクリプト。
「02.swf」 のフレームラベルのラベル名は "aaa","bbb","ccc" という3つ。
ブラウザのURLとして,fn=aaa のような引数を付け足して getURL させる。
↓フレームラベル "aaa" を表示させるボタンのスクリプト
//////////////////////
on (release) {
getURL("02.html?fn=aaa");
}
//////////////////////
↓フレームラベル "bbb" を表示させるボタンのスクリプト
//////////////////////
on (release) {
getURL("02.html?fn=bbb");
}
//////////////////////
↓フレームラベル "ccc" を表示させるボタンのスクリプト
//////////////////////
on (release) {
getURL("02.html?fn=ccc");
}
//////////////////////
--- 「02.html」 の説明 ---------------------
JavaScript で,
引数付きURL から,引数の値の部分だけを取り出し,
SetVariable で 「02.swf」 にその値を送信します。
例)
幅×高さ=400px × 300px の 「02.swf」 を貼り付けるときのタグ例。
ポイントは,
whichObj("test").SetVariable
( window.document.test.SetVariable の変形 )
ここの部分の,
JavaScript の SetVariableメソッド の対象とする test というオブジェクト名称と,
Flash を貼り付ける OBJECT タグ の id を一致させるところです。
<OBJECT …略… id="test">
また,Flash を貼り付ける EMBED タグ の name も一致させておいてください。
<EMBED name="test" …略… >
これで,SetVariable のターゲットが Flash(02.swf) になります。
/////////////////////////////////////////////////////////////
<html>
<head>
<title> 02.swf test </title>
<script type="text/javascript">
function whichObj(objName)
{
if(navigator.appName == "Netscape"){
//Netscape用
return window.document[objName];
}else{
//IE、その他用
return window[objName];
}
}
function frmJump(){
// URL の "fn=" 以降の文字を 変数frm_name に代入
var frm_name = location.href.split("fn=")[1];
// SetVariable で Flash 内の my_frm に frm_name を送信
whichObj("test").SetVariable("my_frm", frm_name);
}
</script>
</head>
<body>
<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
WIDTH="400" HEIGHT="300" id="test">
<PARAM NAME=movie VALUE="02.swf">
<EMBED name="test" src="02.swf" quality=high bgcolor=#FFFFFF
WIDTH="400" HEIGHT="300"
TYPE="application/x-shockwave-flash"></EMBED>
</OBJECT>
</body>
</html>
/////////////////////////////////////////////////////////////
※ 上記JavaScript では,関数を定義しているだけです。
わけあって,関数の実行は Flash からします。
--- 「02.swf」 の説明 ---------------------
次のスクリプトは,「02.swf」 の _root のタイムラインのフレーム1に書くスクリプト例です。
「02.swf」の全体の読み込みの終了と,
getURL ("JavaScript:frmJump()");" で逆送信されてくる,
変数my_frm の値の到着両方を待ってから,
指定フレームラベルにジャンプさせるスクリプトです。
/////////////////////////////////////////////////////////////
// とりあえずストップ
this.stop();
// JavaScript を実行
getURL ("JavaScript:frmJump()");
// 1フレーム進む時間ごとに毎回{ }内を実行
this.onEnterFrame = function() {
// 全てのロードが完了し
// my_frm が JS によって渡されたら
if (this.getBytesLoaded()>=this.getBytesTotal() && my_frm != undefined) {
// ↓ this.gotoAndPlay(my_frm); でも良い
this.gotoAndStop(my_frm);
// この onEnterFrame を削除
delete (this.onEnterFrame);
// それ以外の場合は ストップ を継続
} else {
this.stop();
}
};
/////////////////////////////////////////////////////////////
本当は,「02.html」 自身から
<body onLoad=frmJump()>
で,frmJump() を実行させたいところですが,
上記の場合 NN や Firefox ではそれがうまくできないので,
getURL で frmJump() を実行させる方法を取っています。
以上で,
「01.swf」から変数と値という引数がブラウザ経由で,
次の「02.html」に渡るので,「02.html」のJavaScriptでその引数を受けとり,
「02.swf」に送信するというものができます。
これだと↓,ローカルPCでも引数の受け渡しができます。
////////////////////////////////////////
<html>
<head>
<title></title>
</head>
<body>
<p><a href="02.html?fn=aaa">aaa</a></p>
<p><a href="02.html?fn=bbb">bbb</a></p>
<p><a href="02.html?fn=ccc">ccc</a></p>
</body>
</html>
////////////////////////////////////////






