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 です。
// Test.as
package
{
import flash.display.Sprite;
import bridge.FABridge;
public class Test extends Sprite
{
public function Test():void
{
var _bridge:FABridge = new FABridge();
_bridge.rootObject = this;
var s:Sprite = new Sprite();
s.graphics.beginFill(0xff0000, 1);
s.graphics.drawCircle(50, 50, 50);
s.graphics.endFill();
addChild(s);
}
}
}
重要なのはコンストラクタの中の最初の2行。FABridge
のインスタンスを作って、rootObject
を設定してます。これをしないと、JavaScript から操作できません。
HTMLの準備
<head>
<script src="swfobject.js"></script>
<script src="FABridge.js"></script>
<script>
window.onload = function()
{
var so = new SWFObject("Test.swf", "movie", "400", "300", "9", "#ffffff");
so.write("container");
}
</script>
</head>
<body>
<div id="container"></div>
</body>
Flash の埋め込みに SWFObject を使ってますが、普通に HTML で埋め込んでも OK です。SWF 側で登録が完了すると、FABridge.flash
経由で SWF にアクセスできます。なお、登録完了イベントは次のようにすれば受け取れます。
FABridge.addInitializationCallback("flash", function()
{
// 処理
});
Firebug でいじってみる
ここからは Firebug のコンソールから実験してみます。
まずは root へのアクセス。Test.as で rootObject に代入したオブジェクトを取得します。root 関数を使えば OK。
var root = FABridge.flash.root();
root
の中を見てみます。コンソールに root
と入力し、Firebug の DOM タブで見てみます。
スバラシス。Test
クラスのメソッドがそのまま定義されてます。さらに、プロパティも完璧。例えば、x
というプロパティには、getX()
・setY()
という関数が用意されます。
プロパティの変更
さっそく子供の Sprite
をいじってみます。
var child = root.getChildAt(0);
child.setX(10);
getChildAt()
で Sprite
を取得して、setX()
で x
プロパティをいじります。即座に位置が変わります。たのしー。
この処理は ActionScript だと次のソースに対応してます。
var child:Sprite = root.getChildAt(0);
child.x = 10;
インスタンスの作成
create()
関数でインスタンスを作れます。
var s = FABridge.flash.create("flash.display.Sprite");
s.getGraphics().beginFill(0x0000ff, 0.5);
s.getGraphics().drawCircle(100, 100, 50);
s.getGraphics().endFill();
root.addChild(s);
Sprite
を新たに追加して、円が描画されます。
ActionScript でいうと次のソースに対応してます。
var s:Sprite = new Sprite();
s.graphics.beginFill(0x0000ff, 0.5);
s.graphics.drawCircle(100, 100, 50);
s.graphics.endFill();
root.addChild(s);
イベントハンドラの登録
イベントとして JavaScript の関数を登録することも簡単。
s.addEventListener("click", function(){alert('clicked')});
クリックしたら alert 関数が呼ばれます。
まとめるよ
- JavaScript から SWF をいじれる。
- デバッグ時に、外部からパラメータを簡単にいじれるんじゃね?
- ドキュメントは Flexデベロッパーセンターの記事 ぐらい。もっと知りたきゃソース嫁。
FABridge のダウンロード
Adobe Labs の Flex-Ajax Bridge からできていたようなのですが、LiveCycle Data Services 2.5 beta の一部に組み込まれてからは直接ダウンロードできないようです。
ここ からサンプルも含めて一括ダウンロードできますが、念のため辿り着いた方法を書いておきます。
- FABridge のページからもリンクされている Flex-AJAX Bridge Example を開く
- 右側の Flash で右クリックして [View Source] を選ぶ
- 左下フレームの Download source をクリックする