LocalConnection:在flex 4.1和flash as2之间进行通信

时间:2010-07-29 12:48:15

标签: flex flash localconnection

我正在尝试使用LocalConnection在flex 4.1应用程序与flash动作脚本2应用程序之间进行通信。

flash应用程序

包含一个名为btn01的按钮,代码如下:

var a:LocalConnection = new LocalConnection();

btn01.onPress = function() {
 trace("button clicked");
 a.send("abcde","test");
}

你可以在这里看到它向名为'abcde'的连接发送测试命令。

flex应用程序

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
           xmlns:s="library://ns.adobe.com/flex/spark" 
           xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955"     minHeight="600" initialize="init()">
<fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script>
    <![CDATA[
        import mx.controls.Alert;

        private function init():void {
            var a:LocalConnection = new LocalConnection();
            a.client=this;
            a.connect("abcde");
        }

        public function test():void {
            Alert.show("test");
        }
]]>
</fx:Script>
<mx:SWFLoader source="/location/as2-flash-file.swf" />

如您所见,在flex应用程序中,我连接到名为'abcde'的LocalConnection,并将客户端设置为'this',这意味着可以从LocalConnection执行所有公共函数。

SWFLoader元素加载as2 flash文件。

每当我点击按钮时,我都会看到跟踪消息,但功能测试没有在flex应用程序上执行。任何想法?

更新

两个应用程序都位于同一个域上,实际上位于localhost上,因此不需要使用allowDomain,并且这两个应用程序都是基于Web的。

2 个答案:

答案 0 :(得分:1)

Documentation表示AS2和AS3 LocalConnections应该没有任何问题。

您需要查看allowDomain方法吗?你需要放一个crossdomain.xml文件吗?如果您在两个不同的域上有swfs,请特别注意send方法文档,因为您必须向send方法的连接名称添加其他信息。

它们都是基于浏览器的应用程序吗?我没有,看看AIR

答案 1 :(得分:1)

我在init()范围内创建了LocalConnection变量,因此当函数结束时,localconnection被销毁。解决方案就是在init函数之外声明变量。

public var a:LocalConnection;

private function init():void {
        a = new LocalConnection();
        a.client=this;
        a.connect("abcde");
    }