如何从使用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修复。