FireworksでFlashパネルの表示をして外部JavaScriptを実行する

2008/12/16

こんにちは。きんくまです。

今回はFlashのパネルをFireworksに読み込んで外部ファイルのJavaScriptを呼び出す方法を説明します。

まずはサンプル。とりあえずこれをダウンロードして使えるようにする方法から。
ダウンロードファイルはこちら

zipを解凍したらこれを以下のように配置します。
Program Files以下で各Fireworksフォルダを見つけて以下のようにめぐっていきます。
ConfigurationCommand Panels
私のFireworks CS3だとこのようなパスになりました。
C:Program FilesAdobeAdobe Fireworks CS3ConfigurationCommand Panels
この直下にさきほどのものをおきましょう。

できたらFireworksを再起動します。
するとメニューから
ウインドウ→あとでけす→sample2
というメニューが出てきます。

そしたらボタンを押してみましょう。
外部JavaScriptファイル content.txt が実行されます。
このJavaScriptファイルはUTF-8で保存しています。
文字列を指定するときはダブルクォーテーションじゃなくてクォーテーションでお願いします。
OK→「’」, BAD→「”」

それじゃ、Flaファイルの方をみていきましょう。FlaはAS1(フレームスクリプト)で記述していきます。
→Flaファイルをダウンロードする

FlaからJavaScriptを呼び出すのはMMExecute関数をよびだします。

MMExecute("alert('aiu')");

このスクリプトをうめこんだswfをさきほどの
ConfigurationCommand Panels
のところに設置してFireworksを再起動して、ウインドウを選択してswfを表示してみましょう。

そうするとJavaScript(以下JS)のダイアログがでます。

ちなみにFireworksを再起動する必要があるのは、はじめてスクリプトをフォルダ内に設定したときのみです。ウインドウメニューから表示するときの入口を確保するために必要があります。もし、一度ウインドウメニューから選べるようになっていれば、あとはswfを上書きしたあとに、swfのウインドウを閉じてもう一度ウインドウを開けばswfが再度読み込まれます。(swfの再起動)
なので、デバッグするときは、一度入口を作っておいた後に、「ウインドウを閉じて開くのを繰り返す」というふうになります。

FlaからJSを呼ぶのは簡単なんですが、何行にもわたるJSの場合結構大変です。

var s = "alert('hello')";
s += "alert(' world!')";
MMExecute(s);

こんな感じにしないといけないのです。これはすごく面倒です。if文とかでも一行ごとに足していかないといけないのです。ていうかそれしかできないと思っていました。ところが、外部テキストファイルをFlaで普通に読み込めることがわかったので、これをJSでevalすればムフフな結果になるのじゃないかと思って作ったのが以下のスクリプトです。

function exeJS()
{
  var my_lv:LoadVars = new LoadVars();
  my_lv.onData = function(src:String) {
    if (src == undefined) {
      trace("Error loading content.");
      return;
    }
    var func:String = src.split("rn").join("");
    MMExecute("eval("" + func + "");");
  };
  my_lv.load("content.txt", my_lv);
}

これでASでexeJSを呼び出せば外部スクリプトが呼び出されます。
この場合if文とかの何行かにわたるスクリプトでも大丈夫です。
毎回ロードするのが面倒な場合は、一回読み込んどいてFla内のどこかの変数に確保しておけばよいかもしれません。

これで、JSを基本的には普通にかけるようになるので、Flaに組み込むのが楽になると思います。

余談です。
Extending Fireworks
fwapiというFlaからJSを呼ぶのに便利なラッパークラス(というのかな)が出ています。これを使うと、さきほどのMMExecute関数を使わずにJSを呼ぶことができます。
しかし、1行なら簡単に呼べるのですが、条件分岐などの2行以上にわたる場合は難しいかと思いました。単発でコマンドを呼びたいならこちらを試してみてはいかがでしょう。

LINEで送る
Pocket

自作iPhoneアプリ 好評発売中!
フォルメモ - シンプルなフォルダつきメモ帳
ジッピー電卓 - 消費税や割引もサクサク計算!

ページトップへ戻る