【最大10000ポイント】当たる!!質問投稿キャンペーン!

SWFObjectでFlexに変数を渡す方法がわからず悩んでいます。
簡単なサンプルとして、SWFObjectで渡した変数をAlertで表示するFlexを書こうとしています。FlexもSWFObjectも勉強を始めて間もないので根本的に間違っているところがあると思いますが、自分で考えてうまくいかなかったプログラムを下に書きます。まず、htmlファイルです。
<html><body>
<script type="text/javascript" src="/js/swfobject.js"></script>
<div id="flashcontent"></div>
<script type="text/javascript">
var so = new SWFObject("foo.swf", "hogemovie", "200", "100", "7", "#336699");
so.addVariable("message", "hogehoge");
so.write("flashcontent");
</script>
</body></html>

so.addVariable("message", "huguhugu")で、Flexプログラム内の変数messageに"hogehoge"を代入できると思ったので、Flexプログラムを以下のようにしました。

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="oninit()">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
public var message:String;
private function saySomething(arg:String):void {
Alert.show(arg);
}
private function oninit():void {
saySomething(message);
}
]]>
</mx:Script>
</mx:Application>

しかし、これではAlertのポップアップは出るものの、"hogehoge"は表示されませんでした。

このQ&Aに関連する最新のQ&A

A 回答 (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() という物が何かわからないので省略しています。


このくらいのことしかわかりません。

この回答への補足

回答ありがとうございます。
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プログラム内で具体的に値を渡すとうまくいきましたので。

補足日時:2008/03/10 20:25
    • good
    • 0
この回答へのお礼

試行錯誤しているとできました。
回答にあるFlashVarsという言葉をFlexと一緒に検索してみると結構関連文献が見つかり、下のサイトに行き着きました。
http://www.necst.co.jp/product/ibiz/column/flex/ …
ここを参考にして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>

お礼日時:2008/03/10 22:36

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング