代码之家  ›  专栏  ›  技术社区  ›  Herms

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

  •  1
  • Herms  · 技术社区  · 15 年前

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

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

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

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

    3 回复  |  直到 15 年前
        1
  •  2
  •   Theo.T    15 年前

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

    这至少在本地运行良好(未在网络上测试):

    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 (时间轴上的第一帧) ) :

    trace(id); // (_root.id)
    

    http://www.libspark.org/svn/as3/ForcibleLoader/src/org/libspark/utils/ForcibleLoader.as

        2
  •  0
  •   Assaf Lavie    15 年前

    两者能否通过服务器(即中介)进行通信?