FABridge

JavaScript から Flash を楽々操作できる FABridge

JavaScript から Flash を操作できるツール、Flex-Ajax Bridge(FABridge) を試してみました。

名前に Flex や Ajax とついていますが、Flex や Ajax にしばったライブラリではなく、JavaScript から SWF を操作できる、と考えたほうがよい感じです。

必要なファイルは SWF に組み込む FABridge.as と HTML でインクルードする FABridge.js の2つです。ダウンロード方法はちょっとややこしいので最後で説明します。

SWFの準備

まずは、SWF 側の実装。bridge フォルダに FABridge.as を置きます。AS3.0 です。

  1. // Test.as
  2. package
  3. {
  4.     import flash.display.Sprite;
  5.     import bridge.FABridge;
  6.  
  7.     public class Test extends Sprite
  8.     {
  9.         public function Test():void
  10.         {
  11.             var _bridge:FABridge = new FABridge();
  12.             _bridge.rootObject = this;
  13.  
  14.             var s:Sprite = new Sprite();
  15.             s.graphics.beginFill(0xff0000, 1);
  16.             s.graphics.drawCircle(50, 50, 50);
  17.             s.graphics.endFill();
  18.             addChild(s);
  19.         }
  20.     }
  21. }

重要なのはコンストラクタの中の最初の2行。FABridge のインスタンスを作って、rootObject を設定してます。これをしないと、JavaScript から操作できません。

HTMLの準備

  1. <head>
  2. <script src="swfobject.js"></script>
  3. <script src="FABridge.js"></script>
  4. <script>
  5. window.onload = function()
  6. {
  7.     var so = new SWFObject("Test.swf", "movie", "400", "300", "9", "#ffffff");
  8.     so.write("container");
  9. }
  10. </script>
  11. </head>
  12. <body>
  13.     <div id="container"></div>
  14. </body>

Flash の埋め込みに SWFObject を使ってますが、普通に HTML で埋め込んでも OK です。SWF 側で登録が完了すると、FABridge.flash 経由で SWF にアクセスできます。なお、登録完了イベントは次のようにすれば受け取れます。

  1. FABridge.addInitializationCallback("flash", function()
  2. {
  3.     // 処理
  4. });

Firebug でいじってみる

ここからは Firebug のコンソールから実験してみます。

まずは root へのアクセス。Test.as で rootObject に代入したオブジェクトを取得します。root 関数を使えば OK。

  1. var root = FABridge.flash.root();

root の中を見てみます。コンソールに root と入力し、Firebug の DOM タブで見てみます。

DOM タブ

スバラシス。Test クラスのメソッドがそのまま定義されてます。さらに、プロパティも完璧。例えば、x というプロパティには、getX・setY という関数が用意されます。

プロパティの変更

さっそく子供の Sprite をいじってみます。

  1. var child = root.getChildAt(0);
  2. child.setX(10);

getChildAt で Sprite を取得して、setX で x プロパティをいじります。即座に位置が変わります。たのしー。

この処理は ActionScript だと次のソースに対応してます。

  1. var child:Sprite = root.getChildAt(0);
  2. child.x = 10;
インスタンスの作成

create 関数でインスタンスを作れます。

  1. var s = FABridge.flash.create("flash.display.Sprite");
  2. s.getGraphics().beginFill(0x0000ff, 0.5);
  3. s.getGraphics().drawCircle(100, 100, 50);
  4. s.getGraphics().endFill();
  5. root.addChild(s);

Sprite を新たに追加して、円が描画されます。

結果

ActionScript でいうと次のソースに対応してます。

  1. var s:Sprite = new Sprite();
  2. s.graphics.beginFill(0x0000ff, 0.5);
  3. s.graphics.drawCircle(100, 100, 50);
  4. s.graphics.endFill();
  5. root.addChild(s);
イベントハンドラの登録

イベントとして JavaScript の関数を登録することも簡単。

  1. s.addEventListener("click", function(){alert('clicked')});

クリックしたら alert 関数が呼ばれます。

まとめるよ

  • JavaScript から SWF をいじれる。
  • デバッグ時に、外部からパラメータを簡単にいじれるんじゃね?
  • ドキュメントは Flexデベロッパーセンターの記事 ぐらい。もっと知りたきゃソース嫁。

FABridge のダウンロード

Adobe Labs の Flex-Ajax Bridge からできていたようなのですが、LiveCycle Data Services 2.5 beta の一部に組み込まれてからは直接ダウンロードできないようです。

ここ からサンプルも含めて一括ダウンロードできますが、念のため辿り着いた方法を書いておきます。

  1. FABridge のページからもリンクされている Flex-AJAX Bridge Example を開く
  2. 右側の Flash で右クリックして [View Source] を選ぶ
  3. 左下フレームの Download source をクリックする

FABridge

  • JavaScript から Flash を楽々操作できる FABridge

プロフィール

写真

にとよん (nitoyon)

京都の某ベンチャー会社勤務。プログラマ、たまに趣味でデザイン。