0

我想从传递给 flash 的对象中调用 JS 函数。

JS代码:

 <script>
    function initContext() {
        flashMovie.setContext(ctx);
    }

    var ctx = new Object();
    ctx.saySomething = function(msg) {
        alert(msg);
    }   
</script>

AS3 代码:

if (ExternalInterface.available) {  
    ExternalInterface.addCallback("setContext", say);
    ExternalInterface.call("initContext");
}

所以首先 AS3 调用 JS initContext 和 JS initContext 然后调用 setContext 与一个对象。到目前为止,这有效。我被困在如何从传递的对象中调用函数 saySomething :

private function say(context:Object) {
    ExternalInterface.call(???);
}
4

1 回答 1

1

您无法对传递给 ActionScript 的实际 ctx 对象执行 saySomething JavaScript 函数,因为 ActionScript 无法在内部执行 JavaScript。

当您在 JavaScript 和 ActionScript 之间发送对象时,它会被序列化/反序列化并从 JavaScript 对象转换为 ActionScript 对象,反之亦然,但 saySomething 函数/方法不会转换为 ActionScript 函数。不转换可执行代码。转换字符串、数字、布尔值、数组和对象等基本类型,但不转换函数。

此外,ctx 不会是对您在 JavaScript 中创建的对象的引用,它将是对象的副本(序列化和反序列化)。

于 2013-04-10T21:56:32.033 回答