一个 SWF 文件可以从 Internet 上的任何位置加载另一个 SWF 文件。但是,为了使两个 SWF 文件能够访问彼此的数据(变量和对象),这两个文件必须源于同一个域。默认情况下,在 Flash Player 7 和更高版本中,这两个域必须完全匹配才能实现两个文件共享数据。但是,SWF 文件可以通过调用 LocalConnection.allowDomain
或 System.security.allowDomain()
向从特定域提供的 SWF 文件授予访问权限。
例如,假设 main.swf 是从 www.macromedia.com 提供的,随后该 SWF 文件将来自
data.macromedia.com 的另一个 SWF 文件 (data.swf) 加载到影片剪辑实例 (target_mc
) 中。
// 在 macromedia.swf 中 target_mc.loadMovie("http://data.macromedia.com/data.swf");
此外,假设 data.swf 在其主时间轴上定义名为 getData()
的方法。默认情况下,一旦 data.swf 进行了加载,main.swf 就不能调用该文件中定义的 getData()
方法。这是因为两个 SWF 文件不在相同的域中。例如,在 data.swf 完成加载之后,main.swf 中的以下方法调用将失败。
// 在 macromedia.swf 中,在加载了 data.swf 之后: target_mc.getData(); // 此方法调用将失败
但是,data.swf 可以使用 LocalConnection.allowDomain
处理函数或System.security.allowDomain()
方法向从 www.macromedia.com 提供的 SWF 文件授予访问权限,具体取决于所需的访问类型。以下代码在被添加到 data.swf 之后将允许从 www.macromedia.com 提供的 SWF 文件访问其变量和方法:
// 在 data.swf 中 System.security.allowDomain("www.macromedia.com"); my_lc.allowDomain = function(sendingDomain) { return(sendingDomain=="www.macromedia.com"); }
请注意,allowDomain
允许被授予权限的域中的任何 SWF 文件撰写允许该权限的域中的任何其它 SWF 文件的脚本,除非被访问的 SWF 文件位于使用安全 (HTTPS) 协议的站点。在此情况下,您必须使用 allowInsecureDomain
,而不是 allowDomain
;请参见关于允许 SWF 文件间 HTTP 对 HTTPS 协议的访问。
有关域名匹配的更多信息,请参见Flash Player 安全功能。