SilverlightとFlashの連携について
見返してみたけど、あれでわかる方が不思議なぐらい
適当すぎたので反省。もうちょっと具体的に書きます。
・Flash側の準備
制御に必要なコード(たとえば再生、停止、再生時間の取得など)を
あらかじめ関数として用意しておきます。
それをExternalInterfaceに登録します。
アクションスクリプトの例はこんな感じ。
function setText(str:String)
{
MyTextArea.text = str;
}
ExternalInterface.addCallback("setText", this.setText);
これでsetTextが外部から呼び出せるようになります。
・Silverlight側のコード
1.Flashのオブジェクトを探す
var elem = HtmlPage.Document.GetElementById("movie");
("movie"の部分はHTML上でのIDを指定してください)
Firefoxだと、この子供のオブジェクトがFlashの本体だったりするので
以下のようなコードを追加
if (elem.Children.Count != 0)
{
elem = elem.Children
.First(e => { try { return e.TagName == "embed"; } catch { return false; } });
}
2.Flashのオブジェクトに対してInvoke関数を呼び出す。
名前の文字列を使って呼び出します。Invokeは可変長の引数を受け取る用に
できているのでそのように渡します。この例でいくと
elem.Invoke(setText,"呼び出しテスト");
これで、SilverlightからFlashに通信してMyTextAreaの文字列に
呼び出しテストを設定することができます。