如何使用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对象上附加侦听器。
或者,也许我错过了什么。
任何指针都会非常感激。
答案 0 :(得分:2)
对此有两种可能的解决方法。
不要强制调用AS方法的参数
public function myASFunction(vars:String = null){ ... }
或
始终将变量传递给方法
ob.callASFunction(response.status); /* <= FIX */
有点面子。 :{d
注意:我编辑了我的答案以反映JS修复,但不是AS修复。