Flex应用程序嵌入并与较旧的Flash 8应用程序通信

时间:2009-02-12 19:36:51

标签: flex flash actionscript-3 actionscript-2

我目前维护一个用Flash 8(AS2)编写的应用程序,用于嵌入和控制一些自动生成的SWF。自动生成的SWF也是Flash 8(实际上,它们至少在7中工作,甚至可能更老),因此我当前的应用程序能够直接引用嵌入式SWF中的变量和函数。

我们现在正在研究这个应用程序的新版本,用Flex编写。我们需要复制当前应用程序嵌入和控制自动生成的AS2 SWF的功能。但是,基于AS3的SWF无法在嵌入式基于AS2的SWF中引用变量或函数。遗憾的是,我们无法控制自动生成工具,因此我们无法将其更改为输出基于AS3的SWF。

让AS3和AS2 SWF进行通信的唯一真正解决方案是使用LocalConnection。我需要创建一个包装器AS2 SWF,它将加载自动生成的SWF并充当代理,通过LocalConnection与我的Flex应用程序通信,并对自动生成的SWF执行任何需要做的事情。但是,这有一个问题。代理SWF需要知道要使用哪个LocalConnection ID,但我找不到将ID传递给它的方法(我不能只是硬编码一些随机ID,因为我需要能够支持这个的多个实例app同时)。

有人解决了这个问题吗?有没有办法为嵌入式SWF获取某种唯一标识符?

3 个答案:

答案 0 :(得分:2)

我不确定应用程序是如何工作的,所以如果我错了,请原谅。 如果flex实例必须加载AVM1代理,是不是可以通过包含生成的LocalConnection ID使用的URL注入flash-var?

除了你的评论,还添加了如何将变量发送到AVM1电影。 这至少在本地工作正常(未在网络上测试):

AS3 - FP10

loader = new Loader();

var request:URLRequest = new URLRequest("as2proxy.swf");
var variables:URLVariables = new URLVariables();
variables.id = "local_connection_id";
request.data = variables;

loader.load(request);

AS2 - FP7 “as2proxy.swf”时间轴上的第一帧):

trace(id); // (_root.id)
BTW,偶然发现了Libspark的以下课程: http://www.libspark.org/svn/as3/ForcibleLoader/src/org/libspark/utils/ForcibleLoader.as

答案 1 :(得分:0)

两者是否可以通过服务器(即调解员)进行通信?

答案 2 :(得分:0)