FlashからJavaScript定義する

FlashJavaScriptを連携させてごにょごにょするとき、普通はfoo.swfとfoo.jsなど複数個のファイルが必要です。
ここでFlashからJavaScriptを定義すると、.swfファイル1個で済ませることができます。


ファイル数が減ったところでそれがどうしたって感じもあるんですが、とりあえず書いておこうと思ってエントリに起こしました。

こんな感じで書きます。

    public class Example extends Sprite {
        public function Example() {
            ExternalInterface.call('eval', Example.javascript);
        }

        private static const javascript:String = String(<__JAVASCRIPT__><![CDATA[
            function Foo() {
                ...
                ...
                ...
            }
        ]]></__JAVASCRIPT__>);
  • 全然難しいことでも何でもないんですが、ポイントは
    • JavaScriptを実行するExternalInterface.callと
    • ヒアドキュメントを書くため(違)のE4X/CDATAです。
  • ホントはFlashコンパイル時に、JavaScript定義をファイルから読み込んで埋め込みたかったけどやり方がわからなかった。もしそれができれば、開発中は.swfと.js群を分けて開発効率を上げ、リリース時には1個の.swfにまとめて配布や設置を楽にできるかなーとか思った。
    • 書いてて思い付いたんだけど、画像とかcssとか色々全部ひっくるめて1個の.swfにまとめられるよね。
  • evalする前はただの文字列なので、例えばFlashVarsなんかのパラメータに応じて、吐き出すJavaScriptを動的に変更することもできます。(何に使えるかは思い付かないけど)

ただ「swfのロードが完了するタイミング」っつー問題があるので、何かもう一工夫必要っぽい感じ。

なのでFlashを使ってJavaScriptで半クロスドメイン通信 - ヒルズで働く@robarioの技ログで使ってみたはいいものの、crossdomain.swfに関してはこの方法は使わないようにするかも。