?
通过 Loader 类的 load() 或 loadBytes() 方法将外部文件加载到 Flash Player 或 AIR 中时,可以选择指定 context
参数。此参数是一个 LoaderContext 对象。
LoaderContext 类包括三个属性,用于定义如何使用加载的内容的上下文:
-
checkPolicyFile :仅当加载图像文件(不是 SWF 文件)时才会使用此属性。如果将此属性设置为 true ,Loader 将检查策略文件的原始服务器(请参阅网站控制(策略文件) )。只有内容的来源域不是包含 Loader 对象的 SWF 文件所在的域时才需要此属性。如果服务器授予 Loader 域权限,Loader 域中 SWF 文件的 ActionScript 就可以访问加载图像中的数据;换句话说,可以使用 BitmapData.draw() 命令访问加载的图像中的数据。
请注意,来自 Loader 对象所在域以外的其它域的 SWF 文件可以通过调用 Security.allowDomain() 来允许特定的域。(这里的白话文的意思就是加载别的域中的资源像是图片之类的,flashPlayer会先检查别的域中根目录下是否有crossDomain.xml这个文件。如果这个文件里同意你加载,那么就会开始执行load()这个方法。这个时候你的load对象监听的什么progressEvent或者complete事件才会触发。如果没有得到允许就不会触发后面的事件。如果不被允许加载,那么就没有权限使用bitmapdata的draw方法。再者,如果你加载的是一个swf,那么就没有必要有这个crossDomain.xml因为swf的权限允许不是有crossDomain.xml决定的,而已由securityDomain.allowDomain()来决定的。
如果不需要对正在加载的图像进行像素级的访问,则不应将
checkPolicyFile
属性设置为true
。 在这种情况下不必再检查是否存在策略文件,因为这样会延迟下载的开始时间,并且可能会不必要地占用网络带宽。如果是使用
Loader.load()
方法下载 SWF 文件,也尽量不要将checkPolicyFile
设置为true
。 这是因为 SWF 到 SWF 的权限不是由策略文件控制的,而是由Security.allowDomain()
方法控制的,因此在加载 SWF 文件时checkPolicyFile
不起任何作用。 在这种情况下不必再检查是否存在策略文件,因为这样会延迟 SWF 文件的下载,并且可能会不必要地占用网络带宽)
-
securityDomain :仅当加载 SWF 文件(不是图像)时才会使用此属性。如果 SWF 文件所在的域与包含 Loader 对象的文件所在的域不同,则指定此属性。指定此选项时,Flash Player 将检查策略文件是否存在,如果存在,来自跨策略文件中允许的域的 SWF 文件可以对加载的 SWF 内容执行跨脚本操作。可以将 flash.system.SecurityDomain.currentDomain 指定为此参数。如果不指定的话,就会通过
Security.allowDomain()
方法检查是否有权限。 -
applicationDomain :仅当加载使用 ActionScript 3.0 编写的 SWF 文件(不是图像或使用 ActionScript 1.0 或 2.0 编写的 SWF 文件)时才会使用此属性。加载文件时,通过将 applicationDomain 参数设置为 flash.system.ApplicationDomain.currentDomain ,可以指定将该文件包括在与 Loader 对象相同的应用程序域中。通过将加载的 SWF 文件放在同一个应用程序域中,可以直接访问它的类。如果要加载的 SWF 文件中包含嵌入的媒体,这会很有帮助,您可以通过其关联的类名访问嵌入的媒体。有关详细信息,请参阅使用 ApplicationDomain 类 。(这个属性有很多的用途,他的用途就是管理不同的类。将不同的资源加载到不同的程序域中。我们一般会使用当前域和程序子域)
???????? 下面的示例在从另一个域加载 SWF 时检查策略文件,以便将该文件与 Loader 对象放在同一个安全沙箱中。此外,该代码还将加载的 SWF 文件中的类添加到与 Loader 对象的类相同的应用程序域中:
var context:LoaderContext = new LoaderContext(); context.securityDomain = SecurityDomain.currentDomain; context.applicationDomain = ApplicationDomain.currentDomain; var urlReq:URLRequest = new URLRequest("http://www.[your_domain_here].com/library.swf"); var ldr:Loader = new Loader(); ldr.load(urlReq, context);
下面的示例在从另一个域加载位图时检查策略文件:
var context:LoaderContext = new LoaderContext(); context.checkPolicyFile = true; var urlReq:URLRequest = new URLRequest("http://www.[your_domain_here].com/photo11.jpg"); var ldr:Loader = new Loader(); ldr.load(urlReq, context);