- ベストアンサー
難解!Flashの曜日別の画像変更指定
こんにちは。 ID for WEBLIFEというソフトを使用して WEBサイトのトップページのFLASHを7パターン制作しました。 当初、制作したFLASHをFLASHで読み込みソフト上で曜日指定のスクリプトを付けようかと思っておりましたが、IDで制作したFLASHはプロテクトされているようで読み込む事が出来ません。 javascriptをhtmlに書き込みたいのですが、記述方法が分かりません。 分かる方お願い致します。 現在は毎日深夜0時に手動で更新している状況ですが 来週、ネット環境の無い所に出張するので 更新作業が出来そうにありません。 そうぞよろしくお願い致します。 憂慮している点としては IDで制作したFLASHは一定のフォルダに入れられてしまうので index.htmlと同じ階層の指定は出来そうにありません。 HTMLの記述部分 <!-- idflash("_src/sc765/Site0003/index.swf?_startPage=1","825","320","#ffffff"); //--> 階層 index.html _srcフォルダ ├sc765フォルダ ├Site0003フォルダ ├index.html ├index.xml ├index.swf ├p001PlQs.swf(←月曜日のFLASH) ├p001PlQs.xml ├p001PlQsフォルダ(←月曜日のFLASH) ├_t06_2.jpg(←月曜日のFLASHに読み込む画像) ├motion.swf =================== 分かりにくいとは思いますが何卒よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 う~ん。やはり、乱暴だったかも・・・ ANo1は<div>~</div>の中身を書き換えてしまうという方法だったのですが、少し実験してみました。 内容はちゃんと置き換えられてているみたいです。 しかし、普通のタグはそのままのタグで置き換えられるのですが、「<!--」、「//-->」のタグに限って「<!--」、「//-->」に変換されてしまうようです。 (通常はコメントアウトを置き換えたりはしないので、このタグだけ変わってしまうことを知りませんでした。すみません。) 見かけ上のタグのようなものが、ブラウザに表示されてしまったことと思います。 どうやらこのあたりが、うまく動作しない原因みたいですね。 一般のflashで実験してみようと調べたところ、idflashとはHTMLでの記述方法がまったく違うようなので、検証になりそうもないのでやめました。 ・・・乗りかかった船ということもあるので、スマートさに欠ける方法ではありますが、できそうな方法を考えてみました。 フラッシュの部分だけiframeにして、一度htmlをかませるというバカバカしいものですが・・・ (1)iframeに表示するHTML(単純にフラッシュ部分のみを表示するHTMLファイル)を各曜日ごとに用意する。 (2)本文のidflashを表示する部分をiframeにしておいて、そこに表示するHTMLを曜日ごとに変更する。 という方法です。HTMLファイルの入れ替えについては、動作を確認していますので、iframeだとidflashが表示できないというようなことさえなければ問題なく動作するはずです。 具体的には・・・ (1)ちょっと面倒ですが短いHTMLファイルを曜日ごとに用意 <例えば>mon.html <html><head></head> <body> <!-- idflash("_src/sc765/Site0003/index.swf?_startPage=1","825","320","#ffffff"); //--> </body></html> といった具合です。 (2)-1 これまでのフラッシュ表示部をiframeに変更 ----------------------- <!-- idflash(~~~~); //--> --------↑の部分を----- <iframe src="mon.html" width=825 height=320 frameborder=0 id="flash"> </iframe> --------↑に変更------ 注)W、Hのサイズを想像で書きましたが、825、320はフラッシュを表示するピクセルサイズということで良いのでしょうか?(パラメータの意味がわからないのですみません) もし、違っていたら修正してください。このタグの中のmon.htmlは後でスクリプトで置換えてしまいますが、フラウザ側でスクリプトをOFFにしていた時の為のダミーです。 (2)-2 HTMLの最後に以下を記載。(</body>の前に) <Script type="text/javascript"> <!-- f = new Array('./sun','./mon','./thu','./wed','./thu','./fri','./sat'); //↑各曜日のファイル名です。(.htmlは↓で付加えています) // パスですので違うフォルダにHTMLファイルを置く場合は注意。 document.getElementById('flash').src = f[ new Date().getDay()] + '.html'; //--> </Script>
その他の回答 (3)
- BlurFiltan
- ベストアンサー率91% (1611/1754)
その,当初制作したFLASHを 読み込もうとされた FLASH読み込みソフト で, index.swf または,p001PlQs.swf(月曜日のFLASH)などを, 曜日に応じてロードする SWF を作成すれば簡単ではないでしょうか。 たとえば, その FLASH読み込みソフト で 「dummy.swf」 を作成します。 作成するステージの大きさ(ムービーのサイズ)は, 825×320に設定しておきます。 index.html _srcフォルダ ├sc765フォルダ ├Site0003フォルダ ├ dummy.swf ←ココに配置 ├index.html ├index.xml ├index.swf ├p001PlQs.swf(←月曜日のFLASH) てっぺんの 「index.html」 のHTMLの記述部分 <!-- idflash("_src/sc765/Site0003/dummy.swf","825","320","#ffffff"); //--> 「index.swf」をURLクエリパラメータ付きでロードする例 dummy.swf の最初のフレームにActionScriptを記述 ----------------------------------------- // Dateオブジェクト today を作成 var today = new Date(); // 曜日から番号を取得(この場合 日=1,月=2,…,土=7) var num = today.getDay()+1; // _root(メインのタイムライン) に SWF をロード _root.loadMovie("_src/sc765/Site0003/index.swf?_startPage="+num); ----------------------------------------- コメント行を除くとたった3行です(実は1行にもなります。) その FLASH読み込みソフト で, 上記のようなActionScriptが使えなければ, フリーのFlash作成ソフト,「ParaFla!」 や 「Suzuka」 を使えば良いと思います。 Flash を操作するには Flash が一番向いていると思います。 Flash を作成するのに Flash から逃げようとするのでややこしいだけのような気もしますよ。
お礼
ありがとうございます。 FLASHは不慣れなのですがちょっとやってみました。 dummy.swfの1フレーム目にActionScriptを記述しましたが _root.loadMovie("_src/sc765/Site0003/index.swf?_startPage="+num); ↑この箇所にコンバイルエラーが出て上手くいきません。 お手数ですが再度確認頂ければ大変助かります。
- fujillin
- ベストアンサー率61% (1594/2576)
#1です。こんにちは。 なにはともあれ、できたとのことですのでよかったです。 もうちっとマシな解決方法がありそうな気がするのですが、こちらはflashもidflashもサッパリなもので、直接そこにからまない方法でないと考えられませんので・・・(←いいわけ) さて、iframe内でリンクのターゲットが効かないとのことですが、idflashではターゲットの指定ができないということでしょうか? <方法1> 通常のHTMLであれば、iframe内からのリンクでフレームを解除したい場合は、以下のようなターゲット指定(_top)をすることで可能です。(すでにご承知と思いますが、念のため。) <a href="test.html" target="_top">test</a> <参考> http://www.tohoho-web.com/how2/frame.htm#target このような指定ができない場合は・・・ <方法2> idflashからのリンクの設定方法がわからないのですが、aタグに近いとすればhref="javascript:jump('test.html');"のように指定して、JavaScriptに制御を移せないでしょうか? (普通なら、onclickで指定するところでしょうが、idflashで指定できるかわかりませんし、ターゲットも効かないとするなら効いているらしいのはリンクのみなので・・・) もし、これで制御が移るならばjavascript側で、ターゲットを指定してやればいいので、 function jump(add){ window.top.location.href = add; } としておけば、トップが新しいURLでロードされることになります。 でも、idflashからうまく制御を引き継げないかもしれません。 <方法3> 確実にイベントを捉える方法としては<body>タグで、 <body onunload="jump0();"> などとすることで、(iframe内で)新しいリンク先をロードしようとするタイミングを捉えることが可能です。 ただし、このときのリンク先URLをHTMLから取得するのはどうも無理みたいなので、idflashからリンク先を引いてこなければなりませんが、残念ながら、idfalshがまったくわかりませんので・・・・・行き止まりました。 もしも、idflashからのリンクが1箇所に限定されていれば、調べる必要がなくなるので、方法2のやり方で、決め打ちでリンクすることが可能になり解決です。(ぉぃぉぃ、2箇所以上はどうるするんだ?) なので・・・複数のリンクがある場合は、スクリプトでリンク発生時の座標を取ることは可能なようですので、その位置からフラッシュのリンクボタンの位置との関係で、URLを割り出すことは可能と思われます。 この方法だと、フラッシュ毎にスクリプト内に座標の定義を記入しなければならないので面倒ですね。 (どんどん、どつぼにはまって泥臭くなってきました。) 中途半端ですみませんが、このくらいしか思いつきません。 (関係ありませんが、明日から休みなので、当分、このサイトを見ることができません。) 上のどれかで、うまくいくことをお祈りいたします。 Good Luck!!
お礼
うまくいきました!!! ありがとうございます。 IDFlashでもリンク先にターゲット指定は出来ていたのですが 昨日は全く上手く動作しませんでしたが どうやら、同期がうまくいかずにキャッシュが残っていたようです。 早とちりしてすみません。。。 時間がなかったので本当に助かりましたm(_ _)m ありがとうございます。 Javascript素晴らしいです!
- fujillin
- ベストアンサー率61% (1594/2576)
すこし乱暴かも知れませんが・・・ HTML部分をタグで囲っておいて、JavaScriptで曜日を判定してinnerHTMLなどでフラッシュの呼び出し文を入れ替えてしまえばいけるのでは? 過去の質問で似たようなものがいろいろあります。(曜日で変更や日付で変更等、対象は必ずしもフラッシュではありませんが・・・) 1)時刻によって読み込まれるファイルを変更(フラッシュ) http://oshiete1.goo.ne.jp/qa3042864.html 2)日時によって変化する背景 http://oshiete1.goo.ne.jp/qa645231.html 3)毎週月曜日にテキストリンクのリンク先を変更 http://oshiete1.goo.ne.jp/qa551922.html 4)時間ごとにリンク先を変更 http://oshiete1.goo.ne.jp/qa2506103.html イメージとしてこんな感じでしょうか? (flashはわかりませんので実験してませんが・・・) ----HTML部分---- <div id="flash"> <!-- idflash("_src/sc765/Site0003/index.swf?_startPage=1","825","320","#ffffff"); //--> </div> ----JavaScript部分---- <script type='text/javascript'> <!-- f = new Array(6); f[0] = 'idflash("_src/sc765/Site0003/index.swf?_startPage=1","825","320","#ffffff");'; f{1] = ' '; //・・・・・・以下7種類を定義・・・・・・・ i_HTML ="<--\n" + f[ new Date().getDay() ] + "\n //-->\n"; document.getElementById('flash').innerHTML = i_HTML; //--> </script> HTML内で直接出力させてしまえば、<div>タグを増やしたりidをつけたりしなくても済みますね。 いきなり document.write(i_HTML); でも良さそうです。
補足
難しい質問に答えて頂きありがとうございます。 やってみたのですが上手くいきませんでした。 <div id="flash"> <!-- idflash("_src/sc765/Site0003/index.swf?_startPage=1","825","320","#ffffff"); //--> </div> ↑ この部分(startPage=1)で0~6のFlashの識別をしているようですので ここに何かしらのスクリプトを書いた方がいいのでしょうか?? 知識不足ですみませんが再度助言頂ければ嬉しいです。
補足
ありがとうございます。出来ました!!!! しかし、新たな問題が出てきました。 iframeで表示しているFLASHにはリンクボタンがついております。 ターゲット指定はしているのですが iframe内ではターゲット指定が出来ない為(しても無効になるようです) このフレーム内で指定のページが開いてしまします。 曜日指定は解決しておりますので図々しいお願いかとは思いますが また助言頂ければ大変助かります。