as3のExternalInterfaceクラスによるjavascriptとの通信

| コメント(0) | トラックバック(0)
flash.external.ExternalInterfaceクラスを使用すると、HTML内のjavascriptとの通信を行うことが出来ます。

これにより、javascriptで取得できるイベントによりflash内でアクションを起こしたり、
その逆にflash内からjavascriptを介して、ブラウザの制御を行うことが可能になります。

以下サンプル(リンク)とソースです。
サンプルページ
ExternalInterfaceTest.zip

ソースの肝です。

---------- AS側 ----------
//javascriptから呼び出す関数の登録
if (ExternalInterface.available) {
    //ExternalInterface.marshallExceptions = true;
    ExternalInterface.addCallback("TestFunc_AS", receivedFromJavaScript);
}else {
    text1.appendText("External interface is not available for this container.");
}

//javascriptの呼び出し
if (ExternalInterface.available) {
    try {
        ExternalInterface.call("TestFunc_JS", text2.text);
    } catch (error:SecurityError) {
        text1.appendText("A SecurityError occurred: " + error.message + "\n");
    } catch (error:Error) {
        text1.appendText("An Error occurred: " + error.message + "\n");
    }
}

---------- HTML側 ----------
function TestFunc_JS(value){
    document.forms["form1"].output.value += "ActionScript says: " + value + "\n";
}

function thisMovie(movieName) {
    if (navigator.appName.indexOf("Microsoft") != -1) {
        return window[movieName];
    } else {
        return document[movieName];
    }
}

function sendToActionScript(value) {
    thisMovie("ExternalInterfaceTest").TestFunc_AS(value);
}

まず、availableプロパティでhtml内に埋め込まれたswfであるかどうかをチェックしています。
ちなみにswf単体で動かした場合には、この値がfalseになります。

javascriptからasを呼び出せるようにするには、addCallback関数にて、
javascriptからの呼び出しを許可する関数を登録します。
後は、HTML側からswfを取得し、(swf).登録関数名で呼び出せます。

逆にasからjavascriptを呼び出す際の設定は入りません。
asからjavascriptを呼び出す際にはcall関数を使用します。
第一引数が関数名、第二引数以降に関数に渡すパラメータを指定します。

ちなみにas側でmarshallExceptionsオプションをtrueにすると、例外をキャッチできるようになります。javascript例外をflash内で、flash内の例外をjavascriptでキャッチ可能です。
(flashplayer ver 9.0.115 以降)


トラックバック(0)

トラックバックURL: http://www.1010real.com/mt/mt-tb.cgi/9

コメントする