调用带有ExternalInterface.call()注入JS的AS函数



如何从使用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对象上附加侦听器。

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

任何建议都将不胜感激。

对此有两种可能的修复方法。

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

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

始终将变量传递给方法

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

有点面熟。:{D


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

最新更新