3

EventDispatcher 拡張クラスの「addEventListener」を、ExternalInterface を使用して JavaScript に表示する方法と、Flash オブジェクトでイベントが発生したときに js 関数を呼び出すために JavaScript 関数を使用する方法を教えてください。

イベントは可能ですか?それとも、それを機能させるためにいくつかのトリックが必要になるのでしょうか? アイデアは、javascript で addeventlistener を呼び出すだけのように自然にすることであり、内部イベントが発生したときにフラッシュが javascript コールバックを呼び出しますか?

元:

ジャバスクリプト:

flashobj.addEventListener("progress", function (event){alert(event.data);});

閃光:

ExternalInterface.addCallback("addEventListener_", addEventListener);
// as flashObj is a DOM interface after all, I have my reserve in using "addEventListener" as the name for the callback.
... // later in that code:
dispatchEvent(new Event("progress"));
// or
dispatchEvent(new JSEvent("progress"));

結果は明らかに、event.data に何かを警告する js 関数の呼び出しになります。

4

1 に答える 1

3

そのようなフラッシュにjavascript関数を渡すことはできません。

ただし、JavaScriptでリスナーを受け入れ、フラッシュからそれらを起動できます。

ExternalInterface.call( "flash.event", "progress");
ExternalInterface.call( "flash.event", "loaded");
//Etc

Javascript:

var flash = {

    types: {

    },

    event: function( type ) {
        var listeners = this.types[type];

        if( listeners ) {
            for( var i = 0; i < listeners.length; ++i ) {
                listeners[i]();
            }
        }
    },

    addEventListener: function( type, fn ) {
        if( !this.types[type] ) {
            this.types[type] = [];
        }

        this.types[type].push(fn);
    }

};

flash.addEventListener( "progress", function(){

});
于 2012-07-09T07:09:30.097 に答える