0

我的 ExternalInterface 有问题。

当前设置的方式是,在页面加载时,在 JavaScript 中将布尔值设置为 true,然后由 ActionScript 构造函数(使用计时器)检查,直到它为 true。这标志着 JavaScript 已准备好接收来自 AS3 的调用。

此时,AS3 将添加回调并做一些内部工作,并在构造函数的末尾调用 JavaScript。到现在为止还挺好。JavaScript 将在此时调用 AS3 中的函数(在上述回调中定义),这就是一切都搞砸的地方。

在 IE 上,这工作得很好。但在 Firefox 上,它没有。当我调试它时,我看到调用了 javascript 函数,但是当它尝试调用 AS3 时,没有任何反应。我还尝试添加一个计时器,但由于某种原因,该函数仍会立即执行(在 IE 中)。

很奇怪的是,一两秒后,那个功能就起作用了,看来Flash没有完全加载到FireFox中?但它运行到我的构造函数的最后一行,所以我相信它已经加载了。

编辑:我实际上做了一个 try/catch,JavaScript 给了我一个“TypeError:this.version is not a function”。第二次调用“版本”实际上有效:

Controller.init = function() {
    try {   
        _mainController.getVersion(); // This one does not work
    }
    catch (err) {
        error = err.toString();
    }
}


Controller.addFiles = function(JSON, numberOfFiles) {
    alert(error);

    try {   
        _mainController.getVersion(); // This one works
    }
    catch (err) {
        alert(err.toString()); // This one is never called
    }
}

在从 AS3 中的构造函数调用的 init 期间,它会抛出错误,但稍后如果 JavaScript 从 addFiles 调用 getVersion() 则它可以工作(完全相同的函数)。

请有任何想法,我真的被困住了。

非常感谢,鲁迪

4

1 回答 1

0

Flash Ajax Bridge可能会让您更幸运。它被更多地调整为允许 JS 控制 AS3 文件,因此它可以抽象跨不同浏览器建立连接的过程。

请注意,浏览器通信的插件在最好的情况下是一种痛苦。

于 2010-06-10T21:58:56.357 回答