2012-10-22 73 views
0

我想调用javascript方法flex,将对象从flex传递到javascript

这样我就可以检索到包含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.我知道这是一个基本问题,但即使我搜索了一个小时,也找不到任何东西。所以请帮忙!

回答

1

我相信你不能直接从JS调用AS3中的方法(反之亦然)。应该有一个接口,但可以调用另一个接口。如果我没有记错,你应该使用ExternalInterface API

另外,您也无法将Flex对象传递给JS(反之亦然)。尝试构建一个可序列化为JSON的通用对象,并使用该序列化数据将数据传递给对方。接收方可以解析它以使用数据。在this example中,代码将一个字符串从JS传递给AS3。

在你的情况下,Flex功能将:

  • 构建对象
  • 数据东东吧
  • 连载成JSON字符串
  • 返回字符串给调用者

然后当JS调用函数:

  • JS接收串
  • 使用JSON.parse()到JSON字符串重建为一个JS对象
  • 使用对象
2

要在页面上的Flash/Flex和JS之间进行通信,则使用ExternalInterface类。您不能直接传递对象,但可以将对象转换为可串行化/字符串。这里是你会怎么称呼一个叫“myFunc的”功能并进行设置两个参数,一个字符串和一个数字:

ExternalInterface.call('myFunc',1,'aString'); 

函数名后,必须始终是一个字符串,有一个休息......参数。简而言之,这意味着你可以发送任意数量的参数给函数,用逗号分隔它们(我们在这里做两个)。

如果您在过去的任何时候使用了AS2,您可能知道'eval'函数,它从JS继承而来并由JS使用 - 它分析一个字符串并尝试将其解析为JavaScript,这个你可以从字面上发送Javascript代码,而不是一个FUNC /参数的个数:

ExternalInterface.call('alert("Hello!")'); 

如果你想双向通信,使用对ExternalInterface.addCallback函数注册从JS调用的函数。

在错误的情况下这样做的时候,你可能需要调整您的嵌入代码:“在对包含HTML页面的SWF文件的对象标签,设置以下参数:

PARAM NAME =”的allowScriptAccess “value =”always“

+0

+1注意allowScriptAccess –