若要了解如何使用 LocalConnection 对象在两个 SWF 文件之间进行通信,了解每个文件中使用的命令非常有用。 一个 SWF 文件被称为发送方 SWF 文件;此文件包含要调用的方法。 发送方 SWF 文件必须包含一个 LocalConnection 对象和对 send()
方法的调用。 另一个 SWF 文件被称为接收方 SWF 文件;此文件为调用方法的文件。 接收方 SWF 文件必须包含另一个 LocalConnection 对象和对 connect()
方法的调用。
send()
和 connect()
的使用将有所不同,这取决于 SWF 文件是在同一个域中、在具有可预知域名的不同域中还是在具有不可预知域名(即动态域名)的不同域中。 下文将说明这三种不同的情况,并针对每种情况分别提供代码示例。
同一个域。 这是使用 LocalConnection 对象最简单的情况,它只允许位于同一个域中的 LocalConnection 对象间通信(默认情况下,Flash Player 允许同域通信)。 当同一个域中的两个 SWF 文件通信时,无需实施任何特殊的安全措施,而只需将 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 对象的 SWF 文件在域之间具有更好的可移植性。 若不想在 send()
方法中指定域名,但要向 Flash Player 指出接收方和发送方 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 对象发送和接收单个 SWF 文件中的数据,但这不是通常的用法。