将对象从flex传递给javascript

时间:2012-10-22 08:00:29

标签: javascript flash flex

我想从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。我知道这是根本问题,但即使我用谷歌搜索了一个小时,我也找不到任何东西。所以请帮忙!

2 个答案:

答案 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功能将:

  • 构建对象
  • 用数据填充
  • 将其序列化为JSON字符串
  • 将字符串返回给调用者

然后当JS调用函数时:

  • JS收到字符串
  • 使用JSON.parse()将JSON字符串重建为JS对象
  • 使用对象