flash.net
public class LocalConnection
继承LocalConnection Inheritance EventDispatcher Inheritance Object

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

使用 LocalConnection 类可以创建调用另一个 LocalConnection 对象中的方法的 LocalConnection 对象。通信可以通过以下方式进行:

通过本地连接,可以在 SWF 文件之间进行这种通信,而不用使用 fscommand() 或 JavaScript。LocalConnection 对象只能在运行于同一台客户端计算机上的文件之间进行通信,但这些文件可以在不同的应用程序中运行。例如,浏览器中运行的文件和 Adobe AIR 中运行的 SWF 文件。

ActionScript 3.0 中创建的 LocalConnection 对象可以与 ActionScript 1.0 或 2.0 中创建的 LocalConnection 对象通信。反之亦然:ActionScript 1.0 或 2.0 中创建的 LocalConnection 对象可以与 ActionScript 3.0 中创建的 LocalConnection 对象通信。Flash Player 可自动处理不同版本 LocalConnection 对象间的通信。

若要了解如何使用 LocalConnection 对象在两个 文件之间进行通信,了解每个文件中使用的命令非常有用。一个 文件被称为发送方 文件;此文件包含要调用的方法。发送方 文件必须包含一个 LocalConnection 对象和对 send() 方法的调用。另一个 文件被称为接收方 文件;此文件为调用方法的文件。接收方 文件必须包含另一个 LocalConnection 对象和对 connect() 方法的调用。

send()connect() 的使用将有所不同,这取决于 文件是在同一个域中、在具有可预知域名的不同域中还是在具有不可预知域名(即动态域名)的不同域中。下文将说明这三种不同的情况,并针对每种情况分别提供代码示例。

同一个域。这是使用 LocalConnection 对象最简单的情况,它只允许在位于同一个域中的 LocalConnection 对象间通信,这是因为默认情况下,应用程序允许同域通信。当同一个域中的两个 文件通信时,无需实施任何特殊的安全措施,而只需将 connectionName 参数的同一个值传递给 connect()send() 方法。

从相同的域中加载

// receivingLC is in http://www.domain.com/receiving.swf
receivingLC.connect('myConnection');

// sendingLC is in http://www.domain.com/sending.swf
// myMethod() is defined in sending.swf
sendingLC.send('myConnection', 'myMethod');

具有可预知域名的不同域。当不同域中的两个 SWF 文件通信时,需要通过调用 allowDomain() 方法来允许在这两个不同域之间进行通信。还需要在 send() 方法中使用接收方 LocalConnection 对象的域名限定连接名:

从不同的域中加载

// receivingLC is in http://www.domain.com/receiving.swf
receivingLC.allowDomain('www.anotherdomain.com');
receivingLC.connect('myConnection');

// sendingLC is in http://www.anotherdomain.com/sending.swf
sendingLC.send('www.domain.com:myConnection', 'myMethod');

具有不可预知域名的不同域。有时候,可能希望具有接收方 LocalConnection 对象的 文件在域之间具有更好的可移植性。若要避免在 send() 方法中指定域名,但要指出接收方和发送方 LocalConnection 对象不在同一个域中,可在 connect()send() 调用中的连接名称之前加一个下划线 (_)。若要允许在这两个不同域之间通信,请调用 allowDomain() 方法并传递您希望允许 LocalConnection 调用的域。或者,也可以传递通配符 (*) 参数来允许从所有域调用:

从未知域名中加载

// receivingLC is in http://www.domain.com/receiving.swf
receivingLC.allowDomain('*');
receivingLC.connect('_myConnection');

// sendingLC is in http://www.anotherdomain.com/sending.swf
sendingLC.send('_myConnection', 'myMethod');

可以使用 LocalConnection 对象发送和接收单个 文件中的数据,但这不是通常的用法。

有关 send()connect() 方法的详细信息,请参阅 LocalConnection.send()LocalConnection.connect() 条目中对 connectionName 参数的讨论。此外,请参阅 allowDomain()domain 条目。

查看示例

另请参见

flash.net.LocalConnection.send()
flash.net.LocalConnection.allowDomain()
flash.net.LocalConnection.domain
Connecting to other Flash Player and AIR instances


公共属性
 属性定义方
  client : Object
指示对其调用回调方法的对象。
LocalConnection
 Inheritedconstructor : Object
对类对象或给定对象实例的构造函数的引用。
Object
  domain : String
[只读 (read-only)] 一个字符串,它表示当前 文件所在位置的域。
LocalConnection
 Inheritedprototype : Object
[静态] 对类或函数对象的原型对象的引用。
Object
公共方法
 方法定义方
  
创建 LocalConnection 对象。
LocalConnection
 Inherited
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
使用 EventDispatcher 对象注册事件侦听器对象,以使侦听器能够接收事件通知。
EventDispatcher
  
指定一个或多个可以将 LocalConnection 调用发送到此 LocalConnection 实例的域。
LocalConnection
  
指定一个或多个可以将 LocalConnection 调用发送到此 LocalConnection 对象的域。
LocalConnection
  
关闭(断开连接)LocalConnection 对象。
LocalConnection
  
connect(connectionName:String):void
准备一个 LocalConnection 对象,以接收来自 send() 命令(称为发送方 LocalConnection 对象)的命令。
LocalConnection
 Inherited
将事件调度到事件流中。
EventDispatcher
 Inherited
检查 EventDispatcher 对象是否为特定事件类型注册了任何侦听器。
EventDispatcher
 Inherited
指示对象是否已经定义了指定的属性。
Object
 Inherited
指示 Object 类的实例是否在指定为参数的对象的原型链中。
Object
 Inherited
指示指定的属性是否存在、是否可枚举。
Object
 Inherited
removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
从 EventDispatcher 对象中删除侦听器。
EventDispatcher
  
send(connectionName:String, methodName:String, ... arguments):void
在使用 connect(connectionName) 方法打开的连接(接收方 LocalConnection 对象)上调用名为 methodName 的方法。
LocalConnection
 Inherited
设置循环操作动态属性的可用性。
Object
 Inherited
返回指定对象的字符串表示形式。
Object
 Inherited
返回指定对象的原始值。
Object
 Inherited
检查是否用此 EventDispatcher 对象或其任何始祖为指定事件类型注册了事件侦听器。
EventDispatcher
事件
 事件 摘要 定义方
 Inherited[广播事件] Flash Player 或 AIR 应用程序获得操作系统焦点并变为活动状态时将调度此事件。EventDispatcher
  在异步引发异常(即来自本机异步代码)时调度。LocalConnection
 Inherited[广播事件] Flash Player 或 AIR 应用程序失去操作系统焦点并变为非活动状态时将调度此事件。EventDispatcher
  若对 LocalConnection.send() 的调用尝试向另一个安全沙箱发送数据,则进行调度。LocalConnection
  在 LocalConnection 对象报告其状态时调度。LocalConnection
属性详细信息
client属性
client:Object  [读写]

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

指示对其调用回调方法的对象。默认对象为 this,将创建本地连接。您可以将设置 client 属性设置为另一个对象,并对此对象调用回调方法。



实现
    public function get client():Object
    public function set client(value:Object):void

引发
TypeError — 必须将 client 属性设置为非空对象。

另请参见

domain属性 
domain:String  [只读 (read-only)]

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

一个字符串,它表示当前 文件所在位置的域。

在运行于 Adobe AIR 的 application 安全沙箱的内容(使用 AIR 应用程序安装的内容)中,运行时将使用字符串 app# 后跟 AIR 应用程序的应用程序 ID(在应用程序描述符文件中定义)来代替该超级域。例如,应用程序 ID 为 com.example.air.MyApp connectionName 的应用程序的 connectionName 将解析为“app#com.example.air.MyApp:connectionName”

在为 Flash Player 9 或更高版本发布的 SWF 文件中,返回的字符串就是文件所在的域并包括子域。例如,如果 文件位于 www.adobe.com,则此命令将返回 "www.adobe.com"

如果当前文件是在 Flash Player 中运行并驻留在客户端计算机上的本地文件,则此命令将返回“localhost”

此属性最常见的用法是,将发送方 LocalConnection 对象的域名作为要在接收方 LocalConnection 对象中调用的方法的参数包括在内,或者与 LocalConnection.allowDomain() 一起使用以接受来自指定域的命令。如果仅启用位于同一个域的 LocalConnection 对象之间的通信,则可能不需要使用此属性。



实现
    public function get domain():String

另请参见

构造函数详细信息
LocalConnection()构造函数
public function LocalConnection()

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

创建 LocalConnection 对象。可以使用 LocalConnection 对象启用在同一客户端计算机上运行的不同 文件之间的通信。

另请参见

方法详细信息
allowDomain()方法
public function allowDomain(... domains):void

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

指定一个或多个可以将 LocalConnection 调用发送到此 LocalConnection 实例的域。

您无法使用此方法允许使用安全协议 (HTTPS) 承载的 文件由使用非安全协议承载的 文件进行访问;必须改用 allowInsecureDomain() 方法。

您可能想要使用此方法,以便在不知道来自于不同域的子级 文件究竟来自哪个最终域的情况下,使该子级 文件能够对父级 文件进行 LocalConnection 调用。例如,当您使用负载平衡重定向或第三方服务器时就可能发生这种情况。在这种情况下,您可以使用用于加载的 LoaderInfo 对象的 url 属性,以获取要与 allowDomain() 方法配合使用的域。例如,如果使用 Loader 对象加载子级 文件,则您可以在文件加载后检查 Loader 对象的 contentLoaderInfo.url 属性,并从完整的 URL 字符串中解析出域。如果您这样做的话,请务必等待 文件加载完毕,因为只有在该文件完全加载后,contentLoaderInfo.url 属性才会具有其最终的正确值。

也可能出现相反的情况:您可能创建了一个子级 文件,用以接受来自父级的 LocalConnection 调用,但却不知道其父级的域。在这种情况下,可以通过检查域参数是否与已加载的 文件中 loaderInfo.url 属性的域相匹配来实现此方法。同样,您必须从 loaderInfo.url 的完整 URL 中解析出该域。在这种情况下,您不必等待父级 文件加载;加载子级时,父级已经加载完毕。

使用此方法时,请考虑 Flash Player 安全模型。默认情况下,LocalConnection 对象与创建它的 文件的沙箱相关联,并且不允许对 LocalConnection 对象进行跨域调用,除非在接收方 文件中调用 LocalConnection.allowDomain() 方法。但在 Adobe AIR 中,application 安全沙箱中的内容(使用 AIR 应用程序安装的内容)不受这些安全限制的约束。

有关详细信息,请参阅以下部分:

注意allowDomain() 方法的格式已更改,与其在 ActionScript 1.0 和 2.0 中的格式不同。在这两个早期版本中,allowDomain 是可以实现的回调方法。在 ActionScript 3.0 中,allowDomain() 是调用的 LocalConnection 的内置方法。由于这种更改,allowDomain() 的用法与 flash.system.Security.allowDomain() 基本相同。

参数

... domains — 对您在其上允许 LocalConnection 调用的域进行命名的一个或多个字符串。此参数有两种特殊用法:
  • 可以指定通配符“*”,以允许从所有域调用。
  • 您可以指定字符串“localhost”允许从本地安装的 文件调用此 文件。Flash Player 8 对本地 文件引入了安全限制。默认情况下,在 Flash Player 中运行并允许访问 Internet 的 SWF 文件不能同时访问本地文件系统。在 Flash Player 中,如果指定了“localhost”,则任何本地 SWF 文件都可以访问此 SWF 文件。


引发
ArgumentError — 所有指定的参数都必须为非空字符串。

另请参见

allowInsecureDomain()方法 
public function allowInsecureDomain(... domains):void

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

指定一个或多个可以将 LocalConnection 调用发送到此 LocalConnection 对象的域。

allowInsecureDomain() 方法的用法与 allowDomain() 方法相似,不同之处是 allowInsecureDomain() 方法允许非 HTTPS 来源的 文件将 LocalConnection 调用发送至 HTTPS 来源的 SWF 文件。仅当您在使用 HTTPS 加载的 文件中调用 allowInsecureDomain() 方法时,才能体现这种不同。即使在同一个域中跨越非 HTTPS/HTTPS 边界,也必须调用 allowInsecureDomain() 方法;默认情况下,即使在同一个域中,也不允许从非 HTTPS 文件到 HTTPS 文件进行 LocalConnection 调用。

不建议调用 allowInsecureDomain(),因为这可能会削弱 HTTPS 提供的安全性。通过 HTTPS 加载文件时,您可以确信在通过网络传输文件时,文件不会被篡改。如果随后允许非 HTTPS 文件对 HTTPS 文件进行 LocalConnection 调用,则要接受来自可能在传输过程中已被篡改的 文件的调用。这通常需要格外小心,因为您无法确保到达 HTTPS 文件的 LocalConnection 调用的真实性。

默认情况下,使用 HTTPS 协议承载的文件只能被其它使用 HTTPS 协议承载的文件访问。这种实现保持了 HTTPS 协议所提供的完整性。

不建议使用此方法覆盖默认行为,因为这样做会削弱 HTTPS 安全性。但在某些情况下您可能需要这样做;例如,需要允许从为 Flash Player 6 或更早版本发布的 HTTP SWF 文件访问为 Flash Player 9 或更高版本发布的 HTTPS SWF 文件。

有关安全性的详细信息,请参阅以下部分:

参数

... domains — 对您在其上允许 LocalConnection 调用的域进行命名的一个或多个字符串。此参数有两种特殊用法:
  • 可以指定通配符“*”,以允许从所有域调用。指定“*”将不包括本地主机。
  • 您可以指定字符串“localhost”允许从本地安装的 SWF 文件调用此 SWF 文件。Flash Player 8 对本地 SWF 文件引入了安全限制。可以访问 Internet 的 SWF 文件还不能访问本地文件系统。若指定“localhost”,则任何本地 SWF 文件都可以访问此 SWF 文件。请记住,处于编辑状态时还必须将执行调用的 SWF 文件指定为只能与远程内容交互的 SWF 文件。


引发
ArgumentError — 所有指定的参数都必须为非空字符串。

另请参见

close()方法 
public function close():void

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

关闭(断开连接)LocalConnection 对象。在您不再需要该对象来接受命令时(例如,当您要在另一个 SWF 文件中使用相同的 connectionName 参数发出 connect() 命令时)发出此命令。


引发
ArgumentError — 未连接 LocalConnection 实例,因而无法将其关闭。

另请参见

connect()方法 
public function connect(connectionName:String):void

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

准备一个 LocalConnection 对象,以接收来自 send() 命令(名为发送方 LocalConnection 对象)的命令。与此命令一起使用的对象称作接收方 LocalConnection 对象。接收方和发送方对象必须运行于同一台客户端计算机上。

若要避免出现竞争状况,请在调用附加到接收方 LocalConnection 对象的方法之前先定义这些方法,如 LocalConnection 类示例所示。

默认情况下,将 connectionName 参数解析为值 "superdomain:connectionName",其中 superdomain 是包含 connect() 命令的文件的超域。例如,如果包含接收方 LocalConnection 对象的 文件位于 www.someDomain.com,则 connectionName 解析为 "someDomain.com:connectionName"。(如果 Flash Player 中运行的文件位于客户端计算机上,则分配给 superdomain 的值为“localhost”。)

在运行于 Adobe AIR 的 application 安全沙箱的内容(使用 AIR 应用程序安装的内容)中,运行时将使用字符串 app# 后跟 AIR 应用程序的应用程序 ID(在应用程序描述符文件中定义)来代替该超级域。例如,应用程序 ID 为 com.example.air.MyApp connectionName 的应用程序的 connectionName 将解析为“app#com.example.air.MyApp:connectionName”

此外,在默认情况下,Flash Player 只允许接收方 LocalConnection 对象从其连接名称也解析为值 "superdomain:connectionName" 的发送方 LocalConnection 对象接受命令。这样,Flash Player 就使得位于同一个域中的文件可以很容易地相互通信。

如果您仅在同一个域中的 文件之间实现通讯,请为 connectionName 指定一个不以下划线 (_) 开头且不指定域名的字符串(例如 "myDomain:connectionName")。在 connect(connectionName) 方法中使用同一个字符串。

如果要使位于不同域中的 文件之间实现通信,则为 connectionName 指定一个以下划线 (_) 开头的字符串,这样就会使具有接收方 LocalConnection 对象的 文件在域之间具有更好的可移植性。下面是两种可能的情形:

有关详细信息,请参阅类概述中的讨论和 send() 中对 connectionName 的讨论以及 allowDomain()domain 条目。

注意:冒号用作一种特殊字符,以分隔 connectionName 超级域和字符串。包含冒号的 connectionName 字符串无效。

当在应用程序安全沙箱以外的安全沙箱的内容中使用此方法时,请考虑 Flash Player AIR 安全模型。默认情况下,LocalConnection 对象与创建它的 文件的沙箱相关联,并且不允许对 LocalConnection 对象进行跨域调用,除非在接收方 文件中调用 LocalConnection.allowDomain() 方法。可以在包含 内容的 HTML 页中设置 objectembed 标签的 allowNetworking 参数,防止 SWF 文件使用此方法。但在 Adobe AIR 中,application 安全沙箱中的内容(使用 AIR 应用程序安装的内容)不受这些安全限制的约束。

有关详细信息,请参阅以下部分:

参数

connectionName:String — 一个字符串,对应于要与接收方 LocalConnection 对象进行通信的 send() 命令中指定的连接名称。


引发
TypeError — 传递给 connectionName 参数的值必须为非空值。
 
ArgumentError — 出现此错误有以下三种原因:1) 传递给 connectionName 参数的字符串值为空。请传递非空值。2) 传递给 connectionName 参数的值包含冒号 (:)。冒号用作一种特殊字符,在 send() 方法(而非 connect() 方法)中用于分隔超级域和 connectionName 字符串。3) 已连接 LocalConnection 实例。

另请参见

send()方法 
public function send(connectionName:String, methodName:String, ... arguments):void

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

在使用 connect(connectionName) 方法打开的连接(接收方 LocalConnection 对象)上调用名为 methodName 的方法。与此命令一起使用的对象称作发送方 LocalConnection 对象。包含发送方对象的 SWF 文件和包含接收方对象的 SWF 文件必须在同一台客户端计算机上运行。

您能够以参数形式传递给此命令的数据量限制为 40 千字节。如果 send() 引发 ArgumentError,但是您的语法是正确的,请尝试将 send() 请求分为多个命令,每个命令的数据量不超过 40K。

connect() 条目中所述,默认情况下,会将当前超级域添加到 connectionName。如果您要在不同的域之间实现通讯,则在发送方和接收方 LocalConnection 对象中都需要定义 connectionName,这样当前超级域就不会添加到 connectionName。您可以使用以下两种方法中的一种实现这一目的:

注意:不能在接收方 LocalConnection 对象的 connectionName 中指定超级域,只能在发送方 LocalConnection 对象中指定。

当在应用程序安全沙箱以外的安全沙箱的内容中使用此方法时,请考虑 Flash Player AIR 安全模型。默认情况下,LocalConnection 对象与创建它的 文件的沙箱相关联,并且不允许对 LocalConnection 对象进行跨域调用,除非在接收方 文件中调用 LocalConnection.allowDomain() 方法。对于在浏览器中运行的 SWF 内容,通过在包含 SWF 内容的 HTML 页中设置 objectembed 标签的 allowNetworking 参数,可以防止文件使用此方法。但在 Adobe AIR 中,application 安全沙箱中的内容(使用 AIR 应用程序安装的内容)不受这些安全限制的约束。

有关详细信息,请参阅以下部分:

参数

connectionName:String — 对应于要与发送方 LocalConnection 对象进行通信的 connect() 命令中指定的连接名称。
 
methodName:String — 要在接收方 LocalConnection 对象中调用的方法的名称。以下方法名会导致命令失败:sendconnectcloseallowDomainallowInsecureDomainclientdomain
 
... arguments — 要传递给指定方法的附加可选参数。


事件
securityError:SecurityErrorEventLocalConnection.send() 尝试与执行调用的代码不能访问的安全沙箱中的 SWF 文件进行通信。在接收方的 LocalConnection.allowDomain() 实现中可以避开此问题。
 
status:StatusEvent — 如果 level 属性的值为 "status",则表示调用成功;如果该值为 "error",则表示调用失败。如果接收方 SWF 文件拒绝连接,则调用失败。

引发
TypeError connectionNamemethodName 的值为空。请将非空值传递给这些参数。
 
ArgumentError — 出现此错误是由于以下某种原因:1) connectionNamemethodName 的值为空字符串。请将有效字符串传递给这些参数。2) methodName 中指定的方法受限。3) 正在发送的序列化消息过大(超过 40K)。

另请参见

事件详细信息
asyncError 事件
事件对象类型: flash.events.AsyncErrorEvent
属性 AsyncErrorEvent.type = flash.events.AsyncErrorEvent.ASYNC_ERROR

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

在异步引发异常(即来自本机异步代码)时调度。

AsyncErrorEvent.ASYNC_ERROR 常数定义 asyncError 事件对象的 type 属性值。

此事件具有以下属性:

属性
bubbles false 此属性适用于 ActionScript 3.0 显示对象(在 SWF 文件中)。
cancelable false;没有要取消的默认行为。此属性适用于 SWF 内容中使用 ActionScript 3.0 显示体系结构的显示对象。
currentTarget 当前正在使用某个事件侦听器处理 Event 对象的对象。 此属性适用于 SWF 内容中使用 ActionScript 3.0 显示体系结构的显示对象。
target 调度事件的对象。
error 触发此事件的错误。
securityError 事件  
事件对象类型: flash.events.SecurityErrorEvent
属性 SecurityErrorEvent.type = flash.events.SecurityErrorEvent.SECURITY_ERROR

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

若对 LocalConnection.send() 的调用尝试向另一个安全沙箱发送数据,则进行调度。

SecurityErrorEvent.SECURITY_ERROR 常量定义 securityError 事件对象的 type 属性值。

此事件具有以下属性:

属性
bubbles false
cancelable false;没有要取消的默认行为。
currentTarget 当前正在使用某个事件侦听器处理 Event 对象的对象。
target 报告安全错误的网络对象。
text 要显示为错误消息的文本。

另请参见

status 事件  
事件对象类型: flash.events.StatusEvent
属性 StatusEvent.type = flash.events.StatusEvent.STATUS

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

在 LocalConnection 对象报告其状态时调度。如果 LocalConnection.send() 成功,则 status 事件对象的 level 属性的值为 "status";如果调用失败,则 level 属性为 "error"。如果接收方 文件拒绝连接,则调用失败,并且不会通知发送方 文件。

定义 status 事件对象的 type 属性值。

此事件具有以下属性:

属性
bubbles false
cancelable false;没有要取消的默认行为。
code 对象状态的描述。
currentTarget 当前正在使用某个事件侦听器处理 Event 对象的对象。
level 消息类别,例如 "status""warning""error"
target 报告其状态的对象。

另请参见

示例 如何使用示例
LocalConnectionSenderExample.as

下例包含两个 ActionScript 类,这两个类应当编译到两个单独的 SWF 文件中:

在 LocalConnectionSenderExample SWF 文件中,将创建 LocalConnection 实例,并且当按下按钮时使用 call() 方法通过名为“myConnection”的连接调用 SWF 文件中名为 lcHandler 的方法,调用时将 TextField 的内容作为参数传递。

在 LocalConnectionReceiverExample SWF 文件中,将创建 LocalConnection 实例并调用 connect() 方法,将此 SWF 文件指定为发送到名为“myConnection”的连接的消息的接收方。此外,此类还包括一个名为 lcHandler() 的公共方法,此方法就是 LocalConnectionSenderExample SWF 文件调用的方法。调用时,作为参数传入的文本将被追加到舞台的 TextField 中。

注意:若要测试此示例,必须将两个 SWF 文件同时加载到同一台计算机上。

// Code in LocalConnectionSenderExample.as
package {
    import flash.display.Sprite;
    import flash.events.MouseEvent;
    import flash.net.LocalConnection;
    import flash.text.TextField;
    import flash.text.TextFieldType;
    import flash.events.StatusEvent;
    import flash.text.TextFieldAutoSize;

    public class LocalConnectionSenderExample extends Sprite {
        private var conn:LocalConnection;
        
        // UI elements
        private var messageLabel:TextField;
        private var message:TextField;
        private var sendBtn:Sprite;
        
        public function LocalConnectionSenderExample() {
            buildUI();
            sendBtn.addEventListener(MouseEvent.CLICK, sendMessage);
            conn = new LocalConnection();
            conn.addEventListener(StatusEvent.STATUS, onStatus);
        }
        
        private function sendMessage(event:MouseEvent):void {
            conn.send("myConnection", "lcHandler", message.text);
        }
        
        private function onStatus(event:StatusEvent):void {
            switch (event.level) {
                case "status":
                    trace("LocalConnection.send() succeeded");
                    break;
                case "error":
                    trace("LocalConnection.send() failed");
                    break;
            }
        }
        
        private function buildUI():void {
            const hPadding:uint = 5;
            // messageLabel
            messageLabel = new TextField();
            messageLabel.x = 10;
            messageLabel.y = 10;
            messageLabel.text = "Text to send:";
            messageLabel.autoSize = TextFieldAutoSize.LEFT;
            addChild(messageLabel);
            
            // message
            message = new TextField();
            message.x = messageLabel.x + messageLabel.width + hPadding;
            message.y = 10;
            message.width = 120;
            message.height = 20;
            message.background = true;
            message.border = true;
            message.type = TextFieldType.INPUT;
            addChild(message);
            
            // sendBtn
            sendBtn = new Sprite();
            sendBtn.x = message.x + message.width + hPadding;
            sendBtn.y = 10;
            var sendLbl:TextField = new TextField();
            sendLbl.x = 1 + hPadding;
            sendLbl.y = 1;
            sendLbl.selectable = false;
            sendLbl.autoSize = TextFieldAutoSize.LEFT;
            sendLbl.text = "Send";
            sendBtn.addChild(sendLbl);
            sendBtn.graphics.lineStyle(1);
            sendBtn.graphics.beginFill(0xcccccc);
            sendBtn.graphics.drawRoundRect(0, 0, (sendLbl.width + 2 + hPadding + hPadding), (sendLbl.height + 2), 5, 5);
            sendBtn.graphics.endFill();
            addChild(sendBtn);
        }
    }
}
LocalConnectionReceiverExample.as

// Code in LocalConnectionReceiverExample.as
package {
    import flash.display.Sprite;
    import flash.net.LocalConnection;
    import flash.text.TextField;

    public class LocalConnectionReceiverExample extends Sprite {
        private var conn:LocalConnection;
        private var output:TextField;
        
        public function LocalConnectionReceiverExample()     {
            buildUI();
            
            conn = new LocalConnection();
            conn.client = this;
            try {
                conn.connect("myConnection");
            } catch (error:ArgumentError) {
                trace("Can't connect...the connection name is already being used by another SWF");
            }
        }
        
        public function lcHandler(msg:String):void {
            output.appendText(msg + "\n");
        }
        
        private function buildUI():void {
            output = new TextField();
            output.background = true;
            output.border = true;
            output.wordWrap = true;
            addChild(output);
        }
    }
}