LocalConnection 类用于开发 SWF 文件,这些文件无需使用 fscommand() 方法或 JavaScript 即可向其他 SWF 文件发送指令。LocalConnection 对象只能在同一客户端计算机上运行的 SWF 文件间进行通信,但是它们可以在不同的应用程序中运行。例如,虽然放映文件维护本地信息,而基于浏览器的 SWF 文件进行的是远程连接,但在浏览器中运行的 SWF 文件和在放映文件中运行的 SWF 文件可以共享信息。(放映文件是以可作为独立应用程序运行的格式保存的 SWF 文件 — 即,放映文件嵌入在可执行文件中,因此不需要安装 Flash Player。)
可以使用 LocalConnection 对象在使用不同 ActionScript 版本的 SWF 之间进行通信:
Flash Player 可自动处理不同版本 LocalConnection 对象间的通信。
最简便的 LocalConnection 对象使用方法是只允许位于同一个域或同一 AIR 应用程序中的 LocalConnection 对象之间进行通信。这样,您就不必担心安全问题了。但如果您需要在不同域之间进行通信,则可采用多种方法来实施安全措施。有关详细信息,请参阅
用于 Adobe Flash Platform 的 ActionScript 3.0 参考
中列出的
send()
方法的
connectionName
参数和
LocalConnection
类中的
allowDomain()
和
domain
条目的介绍。
可以使用 LocalConnection 对象在一个 SWF 文件中收发数据,但是 Adobe 不建议这样做。而推荐使用共享对象。
可以使用三种方式将回调方法添加到 LocalConnection 对象中:
-
使 LocalConnection 类成为子类,并添加方法。
-
将
LocalConnection.client
属性设置为实现方法的对象。
-
创建扩展 LocalConnection 的动态类,并动态附加方法。
添加回调方法的第一种方式是扩展 LocalConnection 类。您在自定义类中定义方法,而不是将它们动态添加到 LocalConnection 实例中。下面的代码说明了此方式:
package
{
import flash.net.LocalConnection;
public class CustomLocalConnection extends LocalConnection
{
public function CustomLocalConnection(connectionName:String)
{
try
{
connect(connectionName);
}
catch (error:ArgumentError)
{
// server already created/connected
}
}
public function onMethod(timeString:String):void
{
trace("onMethod called at: " + timeString);
}
}
}
要创建 CustomLocalConnection 类的新实例,您可以使用以下代码:
var serverLC:CustomLocalConnection;
serverLC = new CustomLocalConnection("serverName");
添加回调方法的第二种方式是使用
LocalConnection.client
属性。这包括创建自定义类和将新实例分配给
client
属性,如下面的代码所示:
var lc:LocalConnection = new LocalConnection();
lc.client = new CustomClient();
LocalConnection.client
属性指示应调用的对象回调方法。在上面的代码中,
client
属性设置为自定义类 CustomClient 的新实例。
client
属性的默认值是当前 LocalConnection 实例。如果有两个具有同一方法集但是行为不同的数据处理函数,则可以使用
client
属性 — 例如,在某个应用程序中,一个窗口中的按钮切换另一个窗口中的视图。
要创建 CustomClient 类,可以使用下面的代码:
package
{
public class CustomClient extends Object
{
public function onMethod(timeString:String):void
{
trace("onMethod called at: " + timeString);
}
}
}
添加回调方法的第三种方式是创建动态类并动态附加该方法,这与在早期版本的 ActionScript 中使用 LocalConnection 类非常相似,如下面的代码所示:
import flash.net.LocalConnection;
dynamic class DynamicLocalConnection extends LocalConnection {}
通过使用下面的代码,可以将回调方法动态添加到此类中:
var connection:DynamicLocalConnection = new DynamicLocalConnection();
connection.onMethod = this.onMethod;
// Add your code here.
public function onMethod(timeString:String):void
{
trace("onMethod called at: " + timeString);
}
不建议使用上面这种添加回调方法的方式,因为该代码不是非常易于移植。另外,使用此方法创建本地连接会导致性能问题,因为访问动态属性比访问密封属性慢得多。
isPerUser 属性
将
isPerUser
属性添加到 Flash Player (10.0.32) 和 AIR (1.5.2) 中,旨在解决多个用户登录到 Mac 计算机时发生的冲突。在其他操作系统上,将忽略此属性,因为本地连接始终限制为单个用户。在新代码中应该将
isPerUser
属性设置为
true
。但是,目前的默认值为
false
以实现向后兼容。在以后的运行时版本中此默认值可能会更改。