http://hi.baidu.com/zhangjiyin2010/blog/item/9619afef6603e72d279791c7.html
通过 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);
//=========================================================
以下是crossdomain.xml文件,把它放到要加跨域载的网站根目录
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM " http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<site-control permitted-cross-domain-policies="all"/>
<allow-access-from domain="*" secure="false"/>
<allow-http-request-headers-from domain="*" headers="*" secure="false"/>
</cross-domain-policy>