1

を使用してページに挿入されたJavaScriptからActionScript3の関数を呼び出すにはどうすればよいExternalInterface.call()ですか?

私はこれをたくさんの方法で試しましたが、役に立ちませんでした。

必要なすべてのコードの簡略版を次に示します。

public function myClass() {

    ExternalInterface.addCallback("callASFunction", myASFunction);

    var loadJS:XML =
    <script><![CDATA[

        function(oid){

            ob = document.getElementById(oid);

            if (!window.FB) { /* Include FB JS SDK */ }

            window.fbAsyncInit = function() {

                FB.init({ ... });

                FB.getLoginStatus(function(response) {
                 /* ob.callASFunction(); <= ERROR */
                    ob.callASFunction(response.status); /* <= FIX */
                });
            }
        }

    ]]></script>

    // Inject the JS into the page
    ExternalInterface.call(loadJS, ExternalInterface.objectID);

}

public function myASFunction(vars:String){

    // Do great things

}

コメントコメント

でマークされた行は<= ERROR、Chromeで次のようにスローされます。

Uncaught Error: Error calling method on NPObject.

そしてFFでは:

uncaught exception: Error in Actionscript. Use a try/catch block to find error.

問題は、が呼び出されるExternalInterface.addCallback()前にFlashオブジェクトにリスナーをアタッチしていないことだと思います。ob.callASFunction()

または、おそらく私は何かが欠けています。

任意のポインタをいただければ幸いです。

4

1 に答える 1

2

これには 2 つの修正方法があります。

呼び出された AS メソッドのパラメーターを強制しないでください

public function myASFunction(vars:String = null){ ... }

また

メソッドには必ず変数を渡す

ob.callASFunction(response.status); /* <= FIX */

手のひらの瞬間のビット。:{D


注:ASの修正ではなく、JSの修正を反映するように回答を編集しました。

于 2012-11-29T17:13:04.223 に答える