必须正确配置localconnection的发送端与监听端:连接名须全小写、纯字母数字(如“conn123”);接收端先allowdomain()再connect()并绑定client回调;发送端用send()指定名称、函数名及数据;名称冲突或未就绪时消息静默丢失。

在Adobe AIR应用中实现同一台电脑上不同实例之间的即时消息互通,必须正确配置LocalConnection对象的发送端与监听端,否则会因域隔离或命名冲突导致连接失败。
创建并初始化LocalConnection对象
在发送端和接收端各自新建一个LocalConnection实例,注意二者必须使用完全一致的连接名称字符串,且不能含空格或特殊符号。
发送端代码:var sender:LocalConnection = new LocalConnection();
接收端代码:var receiver:LocalConnection = new LocalConnection();
这一步操作起来很简单,直接把文件拖进去就行。但【连接名称必须全小写、无下划线、纯字母数字组合,例如“conn123”】,否则在某些AIR版本中会静默失败且无报错提示。
设置接收端监听
接收端需调用connect()方法启动监听,并绑定回调函数处理接收到的消息。
receiver.client = {onMessage: function(data:String):void { trace("收到:" + data); }};
receiver.connect("conn123");
如果connect()返回false,说明该名称已被其他LocalConnection占用——此时必须更换名称重试,【不可重复调用connect()覆盖已有监听】,否则将引发SecurityError异常。
从发送端发起通信
发送端调用send()方法向指定名称的监听端发送数据,数据类型仅支持String、Number、Boolean、Object(不含函数或引用)。
sender.send("conn123", "onMessage", "Hello from AIR!");
注意:send()的第一个参数是监听端注册的连接名,第二个参数是监听端client对象上定义的函数名,第三个及以后参数为传递的实际数据。若监听端未就绪或名称不匹配,send()不报错但消息不会到达。
跨域通信的权限控制
默认情况下,LocalConnection只允许同域(即同个AIR应用包或同源SWF)间通信。如需跨域(例如浏览器SWF与AIR应用互通),必须在监听端显式调用allowDomain()。
方法一:允许特定域名
receiver.allowDomain("localhost");
方法二:允许全部域(仅限调试环境)
receiver.allowDomain("*");
方法三:允许当前应用所在域的所有子域
receiver.allowDomain(".example.com");
allowDomain()必须在connect()之前调用,否则无效。生产环境严禁使用"*"通配符,否则任何网页均可向你的AIR应用注入指令。











