- ベストアンサー
SWFObjectでFlexに変数を渡す方法がわからない
- SWFObjectでFlexに変数を渡す方法がわからず悩んでいます。
- Flexプログラム内の変数messageに値を代入しても正しく表示されません。
- SWFObjectとFlexの勉強を始めたばかりで、根本的な間違いがあるかもしれません。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
Flex のことはさっぱりわからない者です。 てきとうなつぶやきのようなものとして見てください。 JavaScript の SWFObject(swfobject.js 内で定義) というものは, Flash のバージョンをチェックしたり, Flash の表示タグを外部JSで簡略化するためのもので, ついでに SWFObject.addVariable("変数名", "値"); という文を用意しておくと HTML の FlashVars ができる。 という簡単便利なものなのですね。 書かれていらっしゃる HTML の方の, <script type="text/javascript" src="/js/swfobject.js"></script> の部分の JS へのパス src="/js/swfobject.js" が変ですが, ファイル構造が次のようになっている場合 任意のフォルダ ├ HTML ├ foo.swf └ js(フォルダ) └ swfobject.js src="./js/swfobject.js" と訂正すると, HTML 内に 「foo.swf」 が表示されるようになります。 そして,結局,HTML 中の JavaScript, so.addVariable("message", "hogehoge"); によって, 「message="hogehoge"」 という変数と値が 「foo.swf」 の _root 階層に,フレーム1 が始まる前に送信されるわけです。 ここまではわかります。 しかし, ここからがよくわからないのです(Flex を知らないもので。) Flash の場合は, Alertコンポーネント をライブラリ内にシンボルとして追加しておいて, その Flash (FLA)のフレーム1に次のように書いて, パブリッシュ したSWF を, HTML 経由でブラウザで見ると, Alert の中に hogehoge が表示されます。 ----------------------------------- import mx.controls.Alert; var message:String; function saySomething(arg:String):Void { Alert.show(arg); } saySomething(message); ----------------------------------- (ActionScript2.0) 本当は次のようにしても表示されるのですが, ----------------------------------- import mx.controls.Alert; Alert.show(message); ----------------------------------- なるべく似せたつもりです。 void は Void の間違いではないかと思います。 また, oninit() という物が何かわからないので省略しています。 このくらいのことしかわかりません。
お礼
試行錯誤しているとできました。 回答にあるFlashVarsという言葉をFlexと一緒に検索してみると結構関連文献が見つかり、下のサイトに行き着きました。 http://www.necst.co.jp/product/ibiz/column/flex/chap23.html ここを参考にしてFlexプログラムを書き換えたところ、うまくいきました。ありがとうございます。FlashVarsという言葉はFlashをやっている方にとっては常識なんだと思いますが、初学者であったため知りませんでした。完全な回答はなくともお答えいただいたことに感謝しています。参考までに書き換えたFlexプログラムを。 <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="saySomething()"> <mx:Script> <![CDATA[ import mx.controls.Alert; public var message:String; public function saySomething():void { message=Application.application.parameters.str; Alert.show(message); } ]]> </mx:Script> </mx:Application> htmlファイルは変数名をmessageからstrに変えただけです。 <html> <body> <script type="text/javascript" src="/js/swfobject.js"></script> <div id="flashcontent"></div> <script type="text/javascript"> var so = new SWFObject("argument.swf", "hogemovie", "400", "400", "7", "#336699"); so.addVariable("str", "huguhugu"); so.write("flashcontent"); </script> </body> </html>
補足
回答ありがとうございます。 FlexでもActionScriptプロジェクトが作成できるようだったのでやってみましたが、うまくいきませんでした。 package { import flash.display.Sprite; import flash.text.TextField; public class action extends Sprite { public function action() { var a_txt:TextField = new TextField(); var str:String; a_txt.text = str; addChild(a_txt); } } } いくつか指摘されている点の補足をしておきますと、 src="/js/swfobject.js"の一番は初めのスラッシュはWebサーバーのwwwルートのことです。あと、voidについてはこれであっていると思います。きっとActionScriptとFlexの相違点なのだと思います。変数のmessageにFlexプログラム内で具体的に値を渡すとうまくいきましたので。