调用JS函数从传入的对象在AS3

Calling JS function from passed object in AS3

本文关键字:对象 AS3 JS 函数 调用      更新时间:2023-09-26

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

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

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

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