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

Making sure a javascript object exists before calling it from Flash

本文关键字:对象 确保 存在 Flash 调用 javascript 在从      更新时间:2023-09-26

我正在为一个我无法直接访问的网站开发一个flash应用程序。flash应用程序应该调用网站发布者定义的网站上的javascript函数。有人建议我在从actionscript:调用其"函数"之前检查javascript对象是否存在

var ok:Boolean = ExternalInterface.call(function() { 
    return typeof customObject !== ''undefined'' 
}

如果我继续:

if (ExternalInterface.available && ok) {
    ExternalInterface.call('customObject.doSomething', someStr);
}

这个if的条件是否总是false,因为在我使用检查之前,保存到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
}

为了健壮性,您需要检查函数是否也存在:

var ok:Boolean = ExternalInterface.call(function() {
    if (typeof(customObject) === 'object' && typeof(customObject.doSomething) === 'function') {
        return true;
    }
}

ExternalInterface.call是同步的,所以你应该会发现它会一直等到这一位结束,然后再转到下一位。

一旦加载swf文件,ExternalInterface.call方法就会可用(而您的JavaScript文件或变量此时可能不在)。因此,您要做的是使用ExternalInterface.addCallback方法将ActionScript中的函数绑定到JavaScript代码中的另一个函数。

这是该功能的文档。