在从Flash调用之前确保存在javascript对象

时间:2012-02-10 13:15:27

标签: javascript flash actionscript-3 actionscript externalinterface

我正在为我无法直接访问的网站开发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
}

2 个答案:

答案 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代码中的另一个函数。

Here's the documentation of that feature