Essence for All

Home > 08-flash > 別のhtml上のswfの任意のフレームへジャンプ

別の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>
////////////////////////////////////////




Powered by Movable Type