我目前维护着一个用Flash8 (AS2)编写的应用程序,它用于嵌入和控制一些自动生成的SWF。自动生成的SWF也是Flash8(实际上,它们至少在7中工作,甚至可能更老),所以我目前的应用程序能够直接引用嵌入式SWF中的变量和函数。
我们现在正在开发这个应用程序的新版本,用Flex编写。我们需要复制当前应用程序的嵌入和控制自动生成的AS2 SWF的功能。但是,基于AS3的SWF不能引用嵌入式基于AS2的SWF中的变量或函数。不幸的是,我们无法控制自动生成工具,因此我们无法将其更改为输出基于AS3的SWF。
让AS3和AS2主权财富基金沟通的唯一真正的解决方案是使用LocalConnection。我需要创建一个包装器Flex,它将加载自动生成的SWF并充当代理,通过LocalConnection与我的AS2应用程序通信,并对自动生成的SWF执行任何需要执行的操作。然而,这有一个问题。代理SWF需要知道要使用什么LocalConnection ID,但我找不到一种方法将ID传递给它(我不能只是硬编码一些随机的ID,因为我需要能够同时支持此应用程序的多个实例)。
有人解决这个问题了吗?有没有办法获得嵌入式SWF的唯一标识符?
发布于 2009-02-12 22:51:16
我不确定这个应用程序是如何工作的,所以如果我错了,请原谅。如果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)顺便说一句,偶然发现了来自Libspark的以下类:http://www.libspark.org/svn/as3/ForcibleLoader/src/org/libspark/utils/ForcibleLoader.as
发布于 2009-02-12 20:09:10
两者可以通过服务器(即中介者)进行通信吗?
发布于 2009-10-15 00:37:48
这是一篇相当复杂的文章,主题是跨AVM的通信:
http://asserttrue.com/articles/2006/05/16/library-type-assets-in-actionscript-3-0-using-assets-created-with-current-releases-of-flash-authoring
https://stackoverflow.com/questions/542890
复制相似问题