从AS3中传递的对象调用JS函数

时间:2013-04-10 10:41:53

标签: javascript actionscript

我想从传递给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(???);
}

1 个答案:

答案 0 :(得分:1)

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

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

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