使用ExternalInterface.call()调用AS函数调用JS

时间:2012-11-29 16:31:06

标签: javascript actionscript-3 facebook-javascript-sdk

如何使用ExternalInterface.call()从已注入页面的JavaScript调用ActionScript 3中的函数?

我尝试了很多方法,但没有用。

以下是所有必要代码的简化版本:

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()在调用ob.callASFunction()之前没有在Flash对象上附加侦听器。

或者,也许我错过了什么。

任何指针都会非常感激。

1 个答案:

答案 0 :(得分:2)

对此有两种可能的解决方法。

不要强制调用AS方法的参数

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

始终将变量传递给方法

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

有点面子。 :{d


注意:我编辑了我的答案以反映JS修复,但不是AS修复。