我想从javascript端调用flex方法,
这样我就可以检索包含flex的数据的javascript对象。
现在我想尝试
var result:Object = new Object()
var keyset:Array = data.getKeySet();
for (var i:int = 0 ; i < keyset.length ; i++) {
result[keyset[i]] = data.get(keyset[i]);
}
return result;
但它不起作用。我怎么能做对吗?
P.S。我知道这是根本问题,但即使我用谷歌搜索了一个小时,我也找不到任何东西。所以请帮忙!
答案 0 :(得分:2)
要在页面上的Flash / Flex和JS之间进行通信,请使用ExternalInterface类。您不能直接传递对象,但可以将对象转换为可序列化/字符串。这是你如何调用一个名为'myFunc'的函数并设置它的两个参数,一个字符串和一个数字:
ExternalInterface.call('myFunc',1,'aString');
在函数名之后,必须始终是一个字符串,有一个... rest参数。简单地说,这意味着你可以向函数发送任意数量的参数,用逗号分隔它们(我们在这里做两个)。
如果您在过去的任何时候都使用过AS2,那么您可能知道'eval'函数,这是继承自(并因此仍被其使用)JS - 它分析字符串并尝试将其解析为JavaScript,使用此你可以直接发送Javascript代码而不是func / args:
ExternalInterface.call('alert("Hello!")');
如果您想要双向通信,请使用ExternalInterface.addCallBack函数将函数注册为JS中的可调用函数。
如果在执行此操作时出错,您可能需要调整嵌入代码:“在包含HTML页面的SWF文件的object标记中,设置以下参数:
param name =“allowScriptAccess”value =“always”
答案 1 :(得分:1)
我相信你不能直接从JS调用AS3中的方法(反之亦然)。应该有一个接口,可以调用另一个接口。如果我没记错的话,你应该使用ExternalInterface
API。
此外,您也无法将Flex对象传递给JS(反之亦然)。尝试构建一个可序列化为JSON的通用对象,并使用该序列化数据将数据相互传递。接收方可以将其解析回来使用数据。在this example中,代码将一个字符串从JS传递给AS3。
在您的情况下,Flex功能将:
然后当JS调用函数时:
JSON.parse()
将JSON字符串重建为JS对象