我正在为我无法直接访问的网站开发Flash应用程序。 Flash应用程序应该在网站上调用javascript函数,由网站发布者定义。我建议在调用它的'function from actionscript:
之前检查javascript对象是否存在var ok:Boolean = ExternalInterface.call(function() {
return typeof customObject !== \'undefined\'
}
如果我继续:
if (ExternalInterface.available && ok) {
ExternalInterface.call('customObject.doSomething', someStr);
}
这个if if的条件总是假的,因为保存到ok
的调用可能在我使用检查之前没有完成,或者ExternalInterface.call
是否真实?换句话说,在确定是否可以保存假定存在customObject之前,我是否必须等待第一个调用的结果。
编辑:根据评论中的建议更新了代码:
if (ExternalInterface.available) {
var ok:Boolean = ExternalInterface.call('function() { return typeof customObject !== \'undefined\' }');
if (ok) {
ExternalInterface.call('customObject.doSomething', someStr);
} else {
.. do some fallback
}
} else {
.. do some fallback
}
答案 0 :(得分:4)
为了稳健性,您还需要检查功能是否也存在:
var ok:Boolean = ExternalInterface.call(function() {
if (typeof(customObject) === 'object' && typeof(customObject.doSomething) === 'function') {
return true;
}
}
ExternalInterface.call是同步的,所以你会发现它会等到这个位完成,直到继续下一个。
答案 1 :(得分:1)
加载swf文件后,ExternalInterface.call
方法将立即可用(而当时您的JavaScript文件或变量可能不存在)。所以你想要做的是使用ExternalInterface.addCallback
方法将ActionScript中的函数绑定到JavaScript代码中的另一个函数。