1

我目前维护一个用 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,因为我需要能够支持多个实例应用程序同时)。

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

4

3 回答 3

2

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

除了您的评论,刚刚添加了如何将变量发送到 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)

顺便说一句,从 Libspark 中偶然发现了以下课程: http ://www.libspark.org/svn/as3/ForcibleLoader/src/org/libspark/utils/ForcibleLoader.as

于 2009-02-12T22:51:16.483 回答
0

两者可以通过服务器(即中介)进行通信吗?

于 2009-02-12T20:09:10.443 回答
0

这是一篇关于跨 AVM 边界通信主题的相当复杂的文章:

http://asserttrue.com/articles/2006/05/16/library-type-assets-in-actionscript-3-0-using-assets-created-with-current-releases-of-flash-authoring

于 2009-10-15T00:37:47.807 回答