• 締切済み

FLASH内リンクを外部から変更するには?

FLASH内に定義してあるGETURL内のリンクを外部テキストファイル を使用して、FLASH内にあるリンクを、外部で簡単に書き換えられるようにする方法がいまいち分かりません。 どなたか教えていただけないでしょうか?

みんなの回答

noname#35109
noname#35109
回答No.1

方法はたくさんありますが, 簡単に言うと, 外部テキストファイルに 「変数名=URL」 という形のテキストデータを用意しておいて, loadVariables関数 または LoadVarsクラス のメソッドで外部テキストデータを Flash 内にロードして そのロードした変数の値を,getURL() の () 内で参照する方法が一般的だと思います。 以下は具体的な方法例です。 また,ご使用の Flash のバージョンがわかりませんが, こちらで勝手に Flash MX 以上(MX,MX2004,8)をお持ちだと言うことで回答します。 Flash 5 以下のバージョンでは,下で回答する方法を使うことはできません。 まず, 任意のフォルダ内にテキストファイルを用意しますが, そのファイル名を 「data.txt」 ということにしておきます。 このファイル名は別に何でもかまいませんが, この説明では 「data.txt」 というファイル名として説明を続けますという意味です。 「data.txt」 の中身ですが, getURL() するリンク先が 勝手に 5つあるものとして次のように書きます。 ---テキストデータ例--------------- &url0=Http://Www.google.co.jp/& &url1=Http://Www.yahoo.co.jp/& &url2=Http://Www.live.com/& &url3=Http://ask.jp/& &url4=Http://Www.marsflag.com/& ----------------------------- ※すみません。 本当は,Http ではなく http ,Www ではなく www なのですが, ここのコミュニティでは,そういうものがあると, &url0=http://www.google.co.jp/& のように,勝手にリンクが挿入されてしまいます。 それにともなって, 見えない文字が入ってしまいますので, コピペする場合は誤動作したり全く動かなくなることが考えられるため, わざと,全角大文字 の H と W を使用しています。 したがって, 上の「テキストデータ例」をコピペする場合は, お手数ですが,H を h,W を w に置換または手動で変更してください。 形はわかりますか。 「変数名=URL」が1つのかたまりで, その改行の前後に & を入れてあるものです。 「&変数名=URL&」 です。 getURL する URL が1つだけしかない場合は, 特に & を使う必要はありません。 url0=Http://Www.google.co.jp/ のような形で良いです。 次に Flash 本体の作成です。 Flash で新規ドキュメントを作成して, 「data.txt」 と同じフォルダに適当な名前を付けて保存します。 そして, ステージ上に1つの ボタン(ボタンシンボルのインスタンス) を作成してください。 そしてそのボタンをコピペで4つ増やして5つにします。 この時点で, ボタンが5つ並んだ レイヤー が1つあるだけのはずですから, 新規でレイヤーを挿入し, そのレイヤーを ActionScript 専用レイヤー と決めておきます。 その新規で作成した レイヤー の フレーム1 の空白キーフレームに, 次のように書きます(コピペ可能)。 ------------------------------------ // LoadVarsクラスのインスタンス myLV を作成 myLV = new LoadVars(); // myLV に外部テキスト「data.txt」をロード myLV.load("data.txt"); ------------------------------------ これで, LoadVarsクラスのインスタンスオブジェクト myLV 内に, 「data.txt」 内の全てのデータが読み込まれます。 ですからあとは, 各ボタンから, myLV 内の各変数を指定してやればOKということになります。 5つあるうちの1つのボタンには次のように書きます。 -------------------------- on (release) { getURL(_root.myLV.url0); } -------------------------- getURL の () 内に, myLV 内の変数名を入れてやるのです。 1つわかれば全てわかると思いますが, 他のボタンには, -------------------------- on (release) { getURL(_root.myLV.url1); } --------------------------    ~ 省略 ~ -------------------------- on (release) { getURL(_root.myLV.url4); } -------------------------- と書きます。 そして,パブリッシュしてもらえば, Google や YAHOO! などにジャンプするボタンができます。 本題は以上です。 ==================== 本題は上記のみで済んでいますが, 上の物はシンプルに原理だけを説明したもので, ひょっとしたら何か不都合が生じる可能性もあります。 (全く不都合を生じないかもしれませんが。) 結局ほとんど同じ物ができるのですが, もう1種類のスクリプトサンプルを書いておきます。 まず, 上で作った5つのボタンにインスタンス名を付けます。 どれがどれでも良いのですが, 5つのボタンに 「mybtn0」,「mybtn1」,「mybtn2」,「mybtn3」,「mybtn4」 という感じで,「文字列+連番数字」のインスタンス名を付けておきます。 そして, レイヤー の フレーム1 の空白キーフレームに書いたスクリプトを, 次のように書きかえます(コピペ可能)。 ------------------------------------ // 「mybtn0」~「mybtn4」のボタン機能を無効にする for (i=0; i<=4; i++) { _root["mybtn"+i].enabled = false; } // LoadVarsクラスのインスタンス myLV を作成 myLV = new LoadVars(); // // LoadVars.onLoad 関数の定義 myLV.onLoad = function(Seikou) { // ロードに成功したら if (Seikou) { // 「mybtn0」~「mybtn4」のボタン機能を有効にする for (i=0; i<=4; i++) { _root["mybtn"+i].enabled = true; } } }; // // キャッシュ参照防止策 // 今現在の時刻オブジェクト myDT を作成 myDT = new Date(); // 1970年1月1日(世界時) からのミリ秒を取得 myTM = myDT.getTime(); // // myLV に外部テキスト「data.txt」をロード myLV.load("data.txt"+"?time="+myTM); ------------------------------------ これで,パブリッシュすれば良いのですが, パブリッシュした SWF を直接開いてみたり, 「制御」→「ムービープレビュー」してみても, 外部テキストがロードされないので正常に動かないと思います。 しかし, 同時にパブリッシュした HTML をブラウザで開くと無事に動作するのではないかと思います。 少なくともアップすれば大丈夫だと思います。 こうなってくると何が本題なのか, さっぱり見えにくくなりますが,結局できるものはほとんど同じ物です。 何をしているのかと言うと, エラーや不具合に対する対処をしているのです。 スクリプトの上の方では何をやっているのかというとロード待ち処理を入れてあるのです。 Flash はネットで使用することが大半です。 ローカルPCだと,外部テキストのロードは瞬時に行われますから, まず不具合がおきることはないのですが, ネットの場合,それも外部テキストの容量がもっと増えた場合, その外部テキストのロードにある程度時間がかかります。 コンマ数秒 ~ 場合によっては十数秒くらいかかるかもしれません。 もし,まだ外部テキストがロードされていないうちに, ボタンをクリックされてしまったら, どこにもジャンプしないとは思いますが, ひょっとしたら予期しない URL にジャンプしてしまったり, 予期しない動作をしてしまう可能性がないとは言いきれません。 それで, 外部テキストがロードされるまで, enabled = false; で,ボタンのボタン機能を無効にしておいて, 外部テキストがロードされ次第, enabled = true; で,ボタンのボタン機能を有効にしています。 スクリプトの下の方では何をやっているのかというと,キャッシュ参照防止策をとっているのです。 SWF や TXT がネット上にあってそれをブラウザでみた場合, Flash からロードされたテキストファイル(「data.txt」)もブラウザのキャッシュ(一時ファイル)に残ります。 ブラウザは,リクエストされた URL があると, まずそのキャッシュを見に行きます。 そして,リクエストされた URL が過去にリクエストされたものと同じであれば, キャッシュデータの方を表示(この場合ロード)させることがあります。 普通は, リクエストされた URL が過去にリクエストされたものと同じであっても, キャッシュデータと本物のデータを比べて, 差分があれば本物のデータを表示させるような計算をブラウザがしてくれるのですが, Flash からロードしたテキストファイルは, なぜか差分があってもキャッシュを表示(ロード)してしまうことが多いようです。 ですから, 「data.txt」と,リクエストするのではなく, 「data.txt?time=1177562306765」 のように,本物のURLのあとに,いつも変わる適当な変数と値を引っ付けてリクエストしているのです。 すると,本当は同じ「data.txt」であっても, URLが変わるので,ブラウザが過去のキャッシュを参照しなくなります。 本当は,「1970年からのミリ秒」なんていう数字を入れる必要はなく, Math.random() などを使ってアクセスする度に違う数値を入れても良いですし何でも良いのですが, この回答では,「1970年からのミリ秒」を入れてみる方法をとりました。 > 外部で簡単に書き換えられるようにする方法 と書かれているので, 頻繁に更新させる可能性があると思い, キャッシュ参照防止策を入れたものを書かせていただいたわけです。 この回答の前半(===より上)は簡単でしょう。 とりあえず前半の方のスクリプトでも大丈夫だと思いますよ。 このご質問とはあまり関係がないことですが, 色々な状況を想定したり,実験検証すると, 本題とは全く関係のないエラー処理のようなものが増えて行くのです。 最初から自分で考えて作ると, 簡単なエラー処理を入れているだけに過ぎませんが。 後に書いた方のスクリプトを先に見ると, 「何じゃコレ~!?」 「ボタン機能を無効にして有効にするのだったら最初から何もしなくて良いじゃん?」 「なんで1970年が登場するの??」 「わっけわからん,脳みそバーン!」みたいな状態になりますよね。 こう言った処理が多くなるので, 他人が書いたプログラムはなかなかわからないものです。 「他人のプログラムを解析するより自分で作った方が早い!」ということにもなります。 このご質問とは関係なく色々な場合についてですが, ヘルプや解説書から, なるべくシンプルなサンプルを見つけて, 1単語1単語を理解して使っていくのが早道だと思います。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Flashからの相対パスによるリンク方法

    Flash初心者で、初めてHPを制作します。Flashでボタンを作り、『同じローカルフォルダ内のhtmlファイルにリンクする』方法がわからず困っています。現在は・・・ function openWindow (eventObject:MouseEvent) { getURL(("staff.html"),"_self"); } enter_btn.addEventListener(MouseEvent.CLICK,openWindow); リンク(flash_index.swf → staff.html )※同じフォルダに置いています ・・・すると(未定義である可能性が高いメソッド getURL の呼び出しです)エラーになります。 「staff.html」はDreamweaverで制作中のhtmlファイルです。 Mac OS X Flash CS3 Dreamweaver CS3 宜しくお願い致します。

  • FLASHの中に外部URLを取り込みたいのですが。。

    どうも、はじめまして。 FLASH MXを使用しております。 タイトルどおりFLASH(*.swf)の画面中に外部のURLを取り込みたいと思っているのですが、そのようなことはできますでしょうか? 例えば、外部テキストファイルをテキストエリアに呼び込む方法は各サイトで公開されていますが、そのURL版といいましょうか。。 つまり、FLASHでベースを作っておいて、更新はHTMLで行いたいのです。(テキスト意外にも画像ファイルを表示したくて…)…可能でしょうか。 ご存知の方、なにとぞよろしくお願いいたします。

  • FLASH内のjavascriptのリンクを外部から変更するには?

    環境:WinXP、Flash8 FLVをループ再生するサムネイル的なSWFを作成しています。 そのSWFで一覧用のボタンをクリックしたときには一覧ページへ、 そのほかをクリックしたときにポップアップで詳細用の大きなFlashムービーを見せようと思い FLASH内リンクを外部から変更するには?:http://okwave.jp/qa2949657.html を参考に外部テキストから外部データの読み込みをしていたのですが SWFを押したときのポップアップの表示だけがうまくいきません。 構造は --------------1FのAS---------------- myLoadVars = new LoadVars(); //[1]LoadVarsクラスのインスタンスにLoadVars.onLoadメソッドを定義 myLoadVars.onLoad = function(bSuccess) { //[2]メソッドに渡された変数分析結果の引数がtrueかどうかを判定[*] if (bSuccess) { koushin.loadMovie(_root.myLoadVars.thum);//□ サムネイル画像の読み込み footerimg.loadMovie(_root.myLoadVars.linkimg);//□サムネイル下部の画像の読み込み //FLVのインクルード nc = new NetConnection(); nc.connect(null); ns = new NetStream(nc); video.attachVideo(ns); // "video"は、ステージ上のビデオに付けたインスタンス名 ns.play(_root.myLoadVars.flvfile);//□ flv ファイルを再生します data.txtの"flvfile"の読み込み ns.onStatus = function(infoObject) { if (infoObject.code == "NetStream.Play.Stop") { this.seek(0); } }; } }; // キャッシュ参照防止策 // 今現在の時刻オブジェクト myDT を作成 myDT = new Date(); // 1970年1月1日(世界時) からのミリ秒を取得 myTM = myDT.getTime(); // // myLV に外部テキスト「data.txt」をロード myLoadVars.load("data.txt"+"?time="+myTM); ------------------------------------ -------------data.txt--------------- &flvfile=Http://○○○○.flv& &thum=thum.jpg& &popup=Http://○○○○.html& &ichiran=/ichiran/& &linkimg=link.jpg& ------------------------------------ flvfileはサーバ上のFLVデータ thum、linkimgは画像 ichiranは一覧ページへのリンク popupは詳細用Flashムービーのhtmlへのリンク (アドレスですが実際はHttpではなくhttp) popupとインスタンス名を付けたボタンに ------------------------------------ on (release) { getURL("javascript:openwin('_root.myLoadVars.popup')"); } ------------------------------------ と記述したのですがポップアップは出ても中のページはNotFoundとなります。 試しに_root.myLoadVars.popupをHttp://○○○○.htmlと置換すると表示されました。 LoadVarsやgetURL、javascriptなどで調べてみたのですが何がいけないのかが解りませんでした。 すいません、どなたかご教授願えないでしょうか? 宜しくお願いします。

  • Flash Playerでのリンク

    Flash MX2004を使用してます。 同じパソコン上で、 a.swfとb.swfというFlashファイルを作って、 a.flaの「ボタン」のアクションから on (release) { getURL ("b.swf", "_self"); } と入力してパブリッシュ後、a.swfから実行すると IE(ブラウザ)が立ち上がってbのリンクへ飛びますが、これをFlash Playerのみを使って(ブラウザを使わずに)リンクさせることはできますか。

  • 外部ファイルでテキスト、リンク先URLを指定したボタン

    FLASH MX WindouwsXPを使用しています。 宜しくお願いします。 外部ファイルよりテキスト、URLを読み込んだマウスアクションの ついたリンクボタンを作成しているのですが、URLが上手く 読み込めません。 ボタンの構成(重なり)は上から ・ボタンインスタンス ・ムービークリップインスタンス ・ダイナミックテキスト の順です。 ダイナミックテキストは LoadDataName = "topmenu26.txt"; loadVariables(LoadDataName, ""); _root.mm1.text = menu1; と読み込み正常に表示されています。 ムービークリップもボタンにActionScriptを記入することで 正常に作動しています。 しかしボタンのリンクだけが正常に作動しません。 ボタンには外部よりリンク先URLを読み込む為、レイヤー最上段の 1フレーム目に loadVariablesNum("topmenu26.txt", 0); と記入し、ボタンには on (release) {getURL(url1, target);} で外部ファイルのに記入したURLを読み込んでいます。 「シーン1」にこのボタンを設置すると、実際この方法で正常に 動きます。 しかし、このボタンを「シーン1」からシンボル内に設置すると 1フレーム目に記入した loadVariablesNum("topmenu26.txt", 0); と、ボタンの on (release) {getURL(url1, target);} がファイルを読み込まずリンクだけ動かなくなってしまいます。 フレームに記入した loadVariablesNum("topmenu26.txt", 0); の記入場所をシンボル内に変更したり、いろいろ試してみた のですが、解決できませんでした。 どのように変更すればシンボル内でもこのようなボタンが 設置できるのでしょうか? また、ボタンに外部からURLを設定する場合、他にどのような方法が あるのでしょうか? 宜しくお願いします。

    • ベストアンサー
    • Flash
  • ACTIONSCRIPT 3.0 外部リンク

    FLASHのACTIONSCRIPT 1.0 2.0は度々利用した事はあるのですが ACTIONSCRIPT 3.0 は初めてで戸惑っています。 ACTIONSCRIPT 1.0/2.0 では getURL で簡単にリンク指定できていたのですが、 ACTIONSCRIPT 3.0 は思うようにリンクが貼れません。 よろしくお願いいたします。

  • Flash 外部テキスト 書き出し

    Flashで外部テキストの読み込み例はたくさんありますが、 Flashから外部テキストへ値を書き出す事はできるのでしょうか? Flash側から外部テキストへ値を書き出し(テキストファイルでなくても構いません)後にその値を再度Flash側で読み込むという動作を望んでいます。 バージョンはFlash8+AS2.0です。 ご教授願います。

  • 外部ボタンから別のFlashを操作

    基本的な質問かもしれませんが‥外部リンクから別のFlashを操作することはできますか? つまり、htmlファイルのなかにAというボタンがあります。これは単なるテキストリンクで作ったものでもなんでもいいです。それをクリックすると、同じhtmlファイルに設置したBというFlashムービーが動き出す‥ということが可能かどうか、が知りたいのです。 Aボタンは別Flashでも構いません。AflashのクリックでBFlashのムービーが動き出す(AとBは別Flashファイル)というのは可能でしょうか?

    • ベストアンサー
    • Flash
  • 外部テキストにリンクが貼れません

    外部テキストのリンクの貼り方を教えてください。 いろいろ調べても、たくさん"&"が入って変数を付ける方法や、 text=だけで表示して<a href>タグを貼る方法などあり、 どれがベストな方法かわかりません。 リンクしたテキストの使い道は、スクロールするテキストボックス内の 更新履歴です。 リンク先に更新したページを指定する形になります。 使用しているのはflashMXです。 よろしくお願い致します。

    • ベストアンサー
    • Flash
  • FLASH 外部テキストで画像を表示

    使用環境 ■WindowsXP ■FLASH professional2004 外部テキストファイルを呼び出して、テキストと同時に画像も表示させたいのですが、実際swfファイルを表示してみると、テキストは表示されるのですが、イメージが表示されません。 外部テキストファイルには、 呼びたいテキスト 呼びたいテキスト <IMG src="画像のパス" width="100" height="100"> と記述しています。 書き出す際にFLASHのバージョンを7.0に設定、 htmlのレンダリングを有効にしているのですが…。 まったく原因が不明なため、大変焦っております。 どなたかご回答よろしくお願いいたします。

    • ベストアンサー
    • Flash