我想从传递给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(???);
}
答案 0 :(得分:1)
您无法在传递给ActionScript的实际ctx对象上执行saySomething JavaScript函数,因为ActionScript无法在内部执行JavaScript。
在JavaScript和ActionScript之间发送对象时,它会被序列化/反序列化并从JavaScript对象转换为ActionScript对象,反之亦然,但saySomething函数/方法不会转换为ActionScript函数。不转换可执行代码。转换基本类型,如字符串,数字,布尔值,数组和对象,但不转换函数。
此外,ctx不会是您在JavaScript中创建的对象的引用,它将是对象的副本(序列化和反序列化)。