• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:内容)

Flash8でのダイナミックテキスト読み込みと条件分岐の方法

このQ&Aのポイント
  • Flash8でのダイナミックテキスト読み込みと条件分岐の方法について説明します。
  • ダイナミックテキストを読み込むためには、loadVariables関数を使用します。
  • 読み込まれたダイナミックテキストの内容に応じて、条件分岐を行うことができます。

質問者が選んだベストアンサー

  • ベストアンサー
  • BumeshiOK
  • ベストアンサー率92% (12/13)
回答No.8

ん?ExternalInterfaceで返し値の読み込み自体は成功しているってことですか? 「読み込めない」って書いてありましたが、 なんか、ご質問の内容が次々変わっていっているようですが??? どこまで出来てどこから出来ないかを明確にするべきでしたね。 とりあえずloadMovieが使えるなら 取得した画像パスをそのままloadMoive()で読み込めばいいのでは?

jackcell
質問者

お礼

有難うございます。 解決いたしました。

その他の回答 (7)

  • BumeshiOK
  • ベストアンサー率92% (12/13)
回答No.7

画像ですか。 であればテキストフィールドに文字列を入れるだけとは異なり、 画像を読み込んで表示させる仕組みになっているとは思いますが、 その場合は下記に注意してください。 1.画像置き場が違うドメインの場合はクロスドメインポリシーに引っかかります。  これは画像側サーバーにFlash側サーバーのドメインを許可してもらうよう、crossdomain.xmlを設定する必要があります。  それが無理な場合はFlash側でサーバープログラムを実行して代わりに所得してもらう必要があります。 2.相対パスで指定した場合、SWFからのパスではなく、SWFが貼り付けられているHTMLからのパスになります。 画像(外部ファイル)で読み込めない現象ですと、 上記がまず考えられます。

jackcell
質問者

補足

度々すみません。 単純に画像の読み込みでしたら「loadMovie」&ディレクトリは絶対パスの指定で成功はしております。 下記の一面ジェネレータさんのやり方でjsファイルのところまでは推測でできるのですが(こちらのやり方のテキストの読み込みは成功済み)、Flash側でどのように受け取り、画像を読み込んでいるのかの工夫に困っております。 <HTML側貼り付け> <script language="javascript"> var image_url="http://labs.infoalive.com/product/newspaper/dog2.jpg"; </script> 読み込み↓ <jsファイル> function setImageUrlToFlash(){ dateObj = new Date(); var ms = dateObj.getTime(); return image_url; } 読み込み↓ <FLASH> ?

  • BumeshiOK
  • ベストアンサー率92% (12/13)
回答No.6

ひょっとしてFlash側、 import flash.external.ExternalInterface; ↑これ抜けてませんか?

jackcell
質問者

補足

Flash側では下記のようにしています。 ///////////////////////////////// System.useCodepage = true; import flash.external.ExternalInterface; //呼ぶJavaScript機能の名前 var callJasFunction:String = "callJavascript"; // JavaScriptと呼んだ後のリターン値 var returnValue:String = ExternalInterface.call(callJasFunction, msg).toString(); return_txt.text = returnValue; ///////////////////////////////// 参考サイト http://www.adobe.com/jp/devnet/flash/articles/external_interface_05.html 色々と申し訳ありません。 元はといえば新聞ジェネレータというものを真似て作ろうと考えていました。 http://labs.infoalive.com/product/newspaper/ 読み込むFlashは一つでFlash内に反映させたいもの(貼り付けようタグ)をjavascriptで渡すような形です。 そしてどうしても画像をjavascriptから読み込むことができなかったため今回質問させてもらいました方法で挑みました。 その他にも良い方法やアドバイスを頂ければ幸いです。 長文失礼しました。

  • BumeshiOK
  • ベストアンサー率92% (12/13)
回答No.5

HTMLでFlashを貼り付けている部分、 allowScriptAccessがsameDomainになってませんか? デフォルトですと、おそらくそうなってます。 このままですと、JSとの連携ができないので、 allowScriptAccess="always" としてください。 embedタグに追加と、param要素の追加両方やってください

jackcell
質問者

補足

回答有難うございます。 Flashの貼り付けは下記のようになっています。 足りないところがありますでしょうか? document.write('<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="https://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="○○" height="○○" id="○○" align="middle" wmode="transparent">'); document.write('<param name="wmode" value="transparent">'); document.write('<param name="allowScriptAccess" value="always" />'); document.write('<param name="movie" value="○○.swf" /><param name="menu" value="false" /><param name="quality" value="high" /><param name="salign" value="t" /><param name="bgcolor" value="#FFFFFF" /><embed src="○○.swf" menu="false" quality="high" salign="t" bgcolor="#FFFFFF" width="○○" height="○○" name="○○" align="middle" allowScriptAccess="always" wmode="transparent" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />'); document.write('</object>');

  • aspnet
  • ベストアンサー率79% (72/91)
回答No.4

#2の質問者補足から、要件を判断すると、 ・Flashから、外部JavaScriptメソッド呼び出しである、ExternalInterface.call(メソッド名, 送信パラメータ)を使って ・JavaScript側で生成されている値を読み込む ことだと思うのですが、もしそうであれば、ご提示のスクリプト例では、flash側にnullが戻ると思います。 理由は、ExternalInterface.call(云々)が実行されるのが、そもそもJavaScript側の実行タイミングと異なるため、読み出し時にJavaScript側変数が消滅しているからです。 html側でフォームを作り、input type="hidden"な隠しフィールドでも作って、そこに値を保管し、ExternalInterface.callのメソッドで読み出すようにすればOKです。 ExternalInterfaceは、クロスブラウザ動作やflash記述でいろいろ制限があるようで、インターフェース動作そのものが失敗している場合もあります。 (恥さらしながら、自分は一発でできた試しがありません) 外していたらごめんなさい。

jackcell
質問者

お礼

有難うございます。 そういったテクニックを使うのもありですね。 成功するかはわかりませんが・・・

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.3

> 開発環境 > Flash8 > actionscript1.0&2.0 それでしたら loadVariables("test.txt"); という超時代遅れ(旧世紀)のスクリプトを使う必要がないと思います。 それにこだわる必要があるのでしょうか? 例えば 携帯用の Flash Lite 1.1 対応限定にするなら 今でもそうせざるを得ないかもしれませんが それならそうと書いてくれないと困るわけですし そう書かれていないのであればそのようなものにこだわる必要はないと思います。 結局 loadVariables関数 の何がいけないのかと言うと この関数は 「外部テキストデータをロードしろ!」 とそこまでで終わるんです。 日常生活に喩えると 私が あなたに  「ハワイに行ってキラウエア火山の写真を撮ってこい!」  と言って終わっている それだけと同じことなのです。 「ハワイに行ってキラウエア火山の写真を撮ってこい!」 と言われても瞬時に撮ってくることは不可能ですよね。 不可能なのに,  「ハワイに行ってキラウエア火山の写真を撮ってこい!」  「そして,噴火の様子を今 即答しろ!」 それは無茶ですよ。 そんな命令をする人自体がおかしいです。 もし私があなたにそんなことを命令する上司であれば,私は上司失格です。 Flash MX (これでも 2002年ですよ) 以上であれば LoadVarsクラスのスクリプトが使えます。 これを使うと 「取ってきたよ!」 という報告をくれるイベントハンドラメソッドが用意されているので, 実際にデータを取って来てから,次の命令を下すことができます。 とりあえずテキストフィールドからは 古すぎて混乱を招くだけの「非推奨機能」である「変数名」を取ります。 「インスタンス名」である「my_txt」だけを残します。 そしてそのフレームに次のように書きます。 ------------------------------ //このフレームで再生を停止 stop(); // myVars という LoadVarsクラスのインスタンスを作成 var myVars = new LoadVars(); // myVars にデータがロードされたとき実行するイベントハンドラメソッドを定義 myVars.onLoad = function() { //テキストフィールドmy_txt.に外部データのstr1の値を表示 my_txt.text = myVars.str1; //もし外部テキスト内の変数str1の値が1であれば if (myVars.str1 == "1") { gotoAndStop(2); //もし外部テキスト内の変数str1の値が2であれば } else if (myVars.str1 == "2") { gotoAndStop(3); } }; //myVars に外部データをロード myVars.load("test.txt"); ------------------------------ なお外部テキスト内のデータですが 「str1=1」 とか 「str1=2」 とかのように 改行を含まないデータにしてください。 たとえば 「str1=1 」 こんなのはダメです。 上のようなデータだと 変数 「str1」 の値は 「1改行コード」 となり 「1」 とは等価でなくなります。

jackcell
質問者

お礼

度々BlurFiltanさんの回答を 拝見しますが、毎回わかりやすい説明です。 有難うございます。

  • BumeshiOK
  • ベストアンサー率92% (12/13)
回答No.2

myTxt = str1 ってって書いてみればよいかと。

jackcell
質問者

補足

大変申し訳ございませんが補足です。 BumeshiOKさんのようにmyTxt = str1で代入はできたのですが・・・ (txtファイルから読み込む場合は・・・) 補足の追加として、htmlに貼り付けたjavascript⇒jsファイル⇒Flashのような流れで下記のような形になります。 <貼り付けているHTML> <script src="yomikomi.js" language="javascript"></script> <script language="javascript">var yomikomi1="1";setNsFlash(); </script> 読み込み↓ <yomikomi.js> function callJavascript(str) { return yomikomi1; } 読み込み↓ <Flash> var callJasFunction:String = "callJavascript"; var returnValue:String = ExternalInterface.call(callJasFunction, msg).toString(); my_txt.text = returnValue; このような場合でダイナミックテキストに読み込まれた場合に代入ができません。 txtファイルから読み込む場合のと違いは「変数」で読むのではなく「インスタンス名」でダイナミックテキストに読み込んでいることです。 相当わかりいにくいとは思いますが宜しくお願いいたします。

  • BumeshiOK
  • ベストアンサー率92% (12/13)
回答No.1

ダイナミックテキストに、インスタンス名(my_txt)と変数(str1)の 両方が割り当てられているということですね。 この場合、 my_txt.txt == str1はfalseになります。 if (str1 == 1) { といった感じの評価式でよいのでは?

jackcell
質問者

補足

my_txt.textのstr1はmyTxtに代入できますでしょうか?

関連するQ&A

専門家に質問してみよう