- ベストアンサー
確認ダイアログとFLASH
(javascriptのカテゴリーから移してきました) ページのロード時に、確認ダイアログを出すように設定しています。 キャンセルをクリックするとそのページはcloseし、OKを押すと確認ダイアログが消えるように作っています。 今回、このページにFLASH(powerbulletで作ったもの)を貼り付けました。 NNとFirefoxでは、確認ダイアログが消えてから(OKがクリックされたら)FLASHがロードされますが、IEでは、ダイアログが出ている内に、FLASHのロードが始まってしまいます。 FLASH自体が、『フェードイン・フェードアウト』の動きをしているので、ダイアログの中身を読んでいる間に、ロードが終ってしまいます。 これは、私のスクリプトの書き方が悪いのでしょうか? 何処を書き直せば、IEでも確認ダイアログの動作完了後にFLASHがロードされるようになるでしょうか? ↓ここからがソースです。 <HTML> <HEAD> <TITLE>~</TITLE> <SCRIPT TYPE="text/javascript"> <!-- function disp() { if(window.confirm('テスト')) {return true;} else {self.close();} } // --> <!-- function ChangePage(){location.href="■■■";} // --> </SCRIPT> </HEAD> <BODY onLoad="disp(); setTimeout('ChangePage()',1000*120)"> <object> <!-- ■■■ここに、powerbulletで作ったFLASHのタグ(?)が入っています■■■ --> </object> </BODY> </HTML> (色々必要なさそうなタグを省いたので、もし不明な所が有れば聞いて頂けますか?)
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
動作確認用URLが削除されたのでスクリプト <SCRIPT TYPE="text/javascript"> <!-- function changeSWF(swfName){ var swfMovie = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0" width="250" height="125"><param name=movie value="'+swfName+'"><param name=quality value=high><embed src="'+swfName+'" quality=high width="250" height="125" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"></object></embed>'; if(document.all) { document.all.myMovie.innerHTML = swfMovie; } else if (document.getElementById) { document.getElementById("myMovie").innerHTML = swfMovie; } } function disp() { if(window.confirm('チェック')) { changeSWF("フラシュファイル"); return true; } else { location.href="http://www.goo.ne.jp/"; } } // --> </SCRIPT> </HEAD> <BODY onLoad="disp();" > <div id="myMovie"> ここにフラッシュ </div>
その他の回答 (2)
- N_A_O
- ベストアンサー率66% (37/56)
OKを押すと、スタートじゃなくて フラッシュを表示する様にすれば、 OSやブラウザによらないで 同じ動きになるんじゃなの。
JavaScript の専門ではないのでよくわかりませんが, 思うに,IEだけが正常のような気がします。 横×縦=350×250 の 「kakunin.swf」 をHTMLと同じディレクトリに置き, 例えば書かれているBODY内を次のようにしたとします。 ------------------------------------------- <BODY onLoad="disp(); setTimeout('ChangePage()',1000*120)"> あいうえお<br> かきくけこ<br> <img border="0" src="http://www.google.com/images/logo_sm.gif" width="150" height="55"><br> <OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" WIDTH=350 HEIGHT=200> <PARAM NAME=movie VALUE="kakunin.swf"> <PARAM NAME=quality VALUE=high> <PARAM NAME=bgcolor VALUE=#FFFFFF> <EMBED src="kakunin.swf" quality=high bgcolor=#FFFFFF WIDTH=350 HEIGHT=200 TYPE="application/x-shockwave-flash" > </EMBED> </OBJECT> </BODY> ------------------------------------------- NNとFirefoxでは、 「あいうえお」と「かきくけこ」と 「Googleロゴ」 は即表示されるのに, Flash だけ,「OK」ボタンをクリックするまで表示されません。 これっておかしいですよね。 「表示されるなら全て表示される。表示されないなら全て表示されない。」 というのが筋だと思います(私が勝手に思う筋(理屈)ですが)。 IEでは, 「あいうえお」も「かきくけこ」も 「Googleロゴ」 も Flash も全て即表示です。 ちゃんと筋が通っています。 = = = = = = = = = = 一応,IE "だけ" の対処法は考えました。 「JavaScript でムービーを制御する」 http://www.adobe.com/jp/support/flash/ts/documents/fl0017.html ここ↑にあるように, JavaScript で Flash を制御できます。 これを参考に確認ダイアログで「OK」がクリックされるまで,Flash を stop させておいて, 「OK」がクリックされると Flash を play させるものです↓。 ------------------------------------------- <HTML> <HEAD> <TITLE>~</TITLE> <SCRIPT TYPE="text/javascript"> <!-- //★ここの部分付け加え var gTheMovie; if(navigator.appName=="Netscape"){ gTheMovie = document; }else{ gTheMovie=window; } function AAAA_play() { gTheMovie.AAAA.Play(); } function AAAA_stop() { gTheMovie.AAAA.Stop(); } // --> <!-- function disp() { if(window.confirm('テスト')) // ★↓ここ1行追加 { AAAA_play(); return true; } else {self.close();} } // --> <!-- function ChangePage(){location.href="■■■";} // --> </SCRIPT> </HEAD> <BODY onLoad="AAAA_stop(); disp(); setTimeout('ChangePage()',1000*120)" > <OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" WIDTH=350 HEIGHT=200 NAME="AAAA"> <PARAM NAME=movie VALUE="kakunin.swf"> <PARAM NAME=quality VALUE=high> <PARAM NAME=bgcolor VALUE=#FFFFFF> <EMBED src="kakunin.swf" quality=high bgcolor=#FFFFFF WIDTH=350 HEIGHT=200 NAME="AAAA" TYPE="application/x-shockwave-flash" > </EMBED> </OBJECT> </BODY> </HTML> ------------------------------------------- 一応,ローカル環境でIEなら,うまく行きます。 しかし,今度は NN と Firefox では確認ダイアログが出なくなります。 NN と Firefox では, <BODY onLoad="AAAA_stop(); disp(); setTi… の,onLoad の2つめ以降が実行されないようです。 ですから, 元(ご質問で書かれている状態)から, setTimeout('ChangePage()',1000*120)" なんて,NN と Firefox では実行されていないのですよ。 といわけで, <BODY onLoad="disp();" だけにして, function disp() にいろいろ詰め込んでみましたが,どこかで詰まります。 詰まるというのは, IEができたら NNができない。NNができたら IE ができない。 これを繰り返すだけでした。 私は JavaScript に詳しくありません。 いろいろ,チャレンジされてみても良いかもしれませんよ。 ====== 結論 =============== 確認ダイアログ の出るページと, Flash のページを同じページにしているので苦労するだけなのではないでしょうか? よくある,「パスワード認証ページ」のように, 確認ダイアログ 専用のページを作って, 「OK」がクリックされたら,Flash のあるページに飛ぶ。 といのが簡単な対処法だと思います。 また,その Flash 表示ページに, <BODY onLoad="setTimeout('ChangePage()',1000*120)" > と書いておけば, この件も楽々クリアできると思います。
お礼
すみません、色々試していてお礼が送れてしまいました。 やはり、sassakunさんの仰るとおり、一つのページに色々詰め込みすぎていたようです。 もう一度、ページ構成から考え直したいと思います。 教えていただいたスクリプトですが、遅くなりましたが、どうにか自分のソースに当て嵌めて、きちんと動作する所までこぎつけました。 何分まだまだhavascriptは初心者ですので、とても勉強になりました。 ありがとうございました。
お礼
お返事が大変遅れてしまって、本当に申し訳ありません。 教えていただいたスクリプトで、どうにか自分のお粗末なスクリプトを動作させる所までこぎつけました。 まだまだjavascriptもFLASHも初心者ですので、N_A_Oさんに教えていただいたスクリプトはとても勉強になりました。 今回は、結局ページ構成を変えて乗り切ることにしましたが(confirmがOKの場合に自動移動したいので…)、教えていただいたスクリプトは、また違う場面で使わせて頂きます。 わざわざ書き直して頂き、本当にありがとうございました。