swfJSFL
(一時配布停止します。申し訳ありません。)
- JSFLをひとつのオブジェクトとして扱うためのクラス。swfパネルやswfを入れ込んだXULパネルとかで使えます。
コード
つかいかた
newして適当に。
var jsfl:swfJSFL = new swfJSFL(swfJSFL.URI_COMMANDS,"test1.jsfl");
第1引数はJSFLのディレクトリの場所、第2引数はファイル名です。ファイルがないと出力パネルでエラーが出るようにしてます。
第1引数にはいくつか定数を用意してます。これ以外がもし必要であれば教えていただければ・・・。
public static const URI_COMMANDS:String = "Commands/"; public static const URI_JS:String = "Javascript/"; public static const URI_PANEL:String = "WindowSWF/";
下の関数を実行すると、JSFLをまるごと実行します。
jsfl.run();
引数に関数名を入力すると、JSFLに書かれた関数を実行することができます。
jsfl.run("testFunc");
関数に引数を渡すこともできます。
(出力を見ていただければわかりますが、関数だけではなく、JSFL全体も(関数以外)一回丸ごと実行されます(MMExecuteの仕様)。つまり、グローバル定数なのとかも定義可能。逆に言うと、実行するJSFLはプロパティと関数の定義のみにしておくべき。)
========= SWF側 =========
var testArray:Array = ["あいうえお","かきくけこ"];
jsfl.run("testFunc","引数1ですよ",testArray,3,true);
========= JSFL側 =========
fl.trace("JSFL run");
function testFunc(arg1,arg2,arg3,arg4) {
fl.trace(arg1);
fl.trace(arg2);
fl.trace(arg3);
fl.trace(arg4);
}
========= 出力結果 =========
JSFL run
引数1ですよ
あいうえお,かきくけこ
3
true
Arrayはコンマで区切られた文字列に、数値やBooleanも文字列に強制的に変換します。というか変換されます。
戻り値がある場合は以下のように記述すれば受け取ることができます。MMExecuteの戻り値自体がStringなので、JSFLで定義されているいろんなオブジェクト自体を戻すことはできません。いろんな値をJSFLから送りたい場合は、JSFL内で様々な値を文字列に結合して、それを戻したらSWF側でお望みの型に変換してください。
var returnString:String = jsfl.run("testFunc");
var returnArray:Array = jsfl.run("testFunc").split(",");
var returnNumber:Number = Number(jsfl.run("testFunc"));
debugMode
debugModeプロパティをtrueにすることにより、swfJSFL.run()を使ったときにMMExecuteの引数に当てられる文字列を出力ウィンドウに出力します。
何かMMExecuteがおかしいんじゃないかと思った時はこの機能をtrueにしてください。デフォルトはfalseです。
jsfl.debugMode = true;
Q&A
- Q:パブリッシュしてSWFを実行すると「xxxx.jsflが存在していないため、メソッドを使用することができません。」と出ます。
- A : JSFLにアクセスするためにMMExecuteという関数を使用することになりますが、この関数はコマンドやSWFPanelの様に、SWFがオーサリング環境で使用されている場合にのみ使用可能となってます。よって、パブリッシュしたSWFを実行してもJSFLにはアクセス出来ないので上記のようなエラーがでます。
おまけ
trace、alertを簡単にできるクラスとメソッドを用意しております。
まんま「JSFL」というクラス名をつけてますが、あんまりよくないような・・・。
JSFL.trace("MMExecuteでfl.traceを渡しましたよー");
JSFL.alert("MMExecuteでalertを渡しましたよー");
両方ともstaticです。swfPanelをデバッグするときにfl.traceやalertは必須だと思いますが、とてもとても面倒な記述をしなければならなかったので作りました。活用していただければ嬉しいです。
本当はkaedeさんのMMExecute2に追加しようと思ったんですが、中身をいじるのが怖かったので・・・。
注意事項
JSFL全般にいえますが、エラーが出たときの原因がものすごくわかりにくいです。それがこのクラスのバグなのかJSFLのエラーなのかわからないこともあるかと思いますが、一応JSFLの方を精査してください。それでもしバグが発見されればご一報ください。
あと、JSFL.traceとかJSFL.alertとか、一応シングル・ダブルクォーテーションとか文字列変換で対応してるので大丈夫だと思いますが、なんかあればこれもご一報を・・・あるいは直してもらってもOKです。
(2009/10/11 追加)
swfJSFL.runやJSFL.alert、JSFL.traceの引数にString型を入れる場合、「\n」とか入ってると、MMExecuteで送る文字列に改行が入ってしまい、fl.runScriptが正常に実行されずエラーが出てしまいます。これは仕様でどうしようもないですので、カンマ区切りで渡してJSFLファイル側で展開するなり、swfJSFL.runをトリガとしてJSFL側で実際の出力を行うなど、工夫をお願いします。
(2010/01/06 追加)
runメソッドで実行する関数の引数でString型を使う場合に、その中に\nなどの特殊文字を入れても大丈夫になりました。
仕様とか言っておきながら、ちょっとした記述でできるようになりました。反省。
あと、エラーの時の処理を変えました。
JSFL.traceで出力パネルでエラーの種類を出力し、throw new Errorで強制停止するようにしました。
swfJSFL内でのエラーはこれでわかりやすくなったと思いますが、埋め込み元のswfでエラーが起きた場合、swfJSFLでは対応出来ませんのでご了承ください。
ライセンス
- Licensed under the MIT License
参考
- kaedeさんのMMExecute2をちょこっとだけ参考にしました。というかコミットするきっかけになりました。ありがとうございます。
コミッタ
- Hiiragi

