[AS3]AS3加载各种不同文件类型的详细介绍与分析
SWF 文件可以加载以下内容类型:
■ SWF 文件
■ 图像
■ 声音
■ 视频
加载 SWF 文件和图像
使用 Loader 类加载 SWF 文件和图像(JPG、GIF 或 PNG 文件) 。除只能与本地文件系统内容交互的沙箱中的 SWF 文件之外,其它所有 SWF 文件都可以从任何网络域加载SWF 文件和图像。只有本地沙箱中的 SWF 文件才能从本地文件系统中加载 SWF 文件和图像。但是,只能与远程内容交互的沙箱中的文件只能加载位于受信任的本地沙箱或只能与远程内容交互的沙箱中的本地 SWF 文件。只能与远程内容交互的沙箱中的 SWF 文件可加载非 SWF 文件 (例如图像)的本地内容,但是无法访问所加载内容中的数据。
从不受信任的来源 (如 Loader 对象的根 SWF 文件所在域以外的域)加载 SWF 文件时,您可能需要为 Loader 对象定义遮罩,以防止加载的内容(Loader 对象的子级)绘制到该
遮罩之外的 Stage 部分中,如以下代码所示:
import flash.display.*;
import flash.net.URLRequest;
var rect:Shape = new Shape();
rect.graphics.beginFill(0xFFFFFF);
rect.graphics.drawRect(0, 0, 100, 100);
addChild(rect);
var ldr:Loader = new Loader();
ldr.mask = rect;
var url:String = "http://www.cuplayer.com/content.swf";
var urlReq:URLRequest = new URLRequest(url);
ldr.load(urlReq);
addChild(ldr);
当调用 Loader 对象的 load() 方法时,可以指定一个 context 参数,该参数是一个LoaderContext 对象。 LoaderContext 类包括三个属性,用于定义如何使用加载的内容的上下文:
■ checkPolicyFile:仅当加载图像文件 (不是 SWF 文件)时才会使用此属性。如果图像文件所在的域与包含 Loader 对象的文件所在的域不同,则指定此属性。如果将此属性设置为 true, Loader 将检查跨域策略文件的原始服务器 (请参阅第 656页的“Web 站点控制 (跨域策略文件) ” ) 。如果服务器授予 Loader 域适当权限,则来自Loader 域中 SWF 文件的 ActionScript 可以访问所加载图像中的数据。换言之,可以使用 Loader.content 属性获取对表示所加载图像的 Bitmap 对象的引用,或使用BitmapData.draw() 方法访问所加载图像中的像素。
■ securityDomain:仅当加载 SWF 文件(不是图像)时才会使用此属性。如果 SWF文件所在的域与包含 Loader 对象的文件所在的域不同,则指定此属性。对于securityDomain 属性而言,目前仅支持以下两个值:null (默认值)和SecurityDomain.currentDomain。如果指定 SecurityDomain.currentDomain,则要求加载的 SWF 文件应 “导入”到执行加载的 SWF 文件所在的沙箱中,这意味着其运行方式就像它已从执行加载的 SWF 文件自己的服务器中加载一样。只有在位于加载的SWF 文件服务器上找到跨域策略文件时才允许这样做,从而允许执行加载的 SWF 文件所在的域进行访问。如果找到所需的策略文件,则一旦加载开始,加载方和被加载方可以自由地互相访问脚本,原因是它们位于同一沙箱中。请注意,多数情况可以通过执行普通加载操作然后让加载的 SWF 文件调用 Security.allowDomain() 方法来取代沙箱导入。由于加载的 SWF 文件将位于自己的原始沙箱中,并因而能够访问自己实际服务器上的资源,因此后一种方法会更易于使用。
■ applicationDomain:仅当加载使用 ActionScript 3.0 编写的 SWF 文件 (不是图像或使用 ActionScript 1.0 或 2.0 编写的 SWF 文件)时才会使用此属性。当加载文件时,可以指定文件应放置在特定的应用程序域中,而不是默认放置在一个新的应用程序域中,这个新的应用程序域是执行加载的 SWF 文件所在应用程序域的子域。请注意,应用程序域是安全域的子单位,因此仅当要加载的 SWF 文件由于以下原因来自您自己的安全域时,才能指定目标应用程序域:该文件来自您自己的服务器,或者使用securityDomain 属性已成功地将该文件导入到您的安全域中。如果指定应用程序域,但加载的 SWF 文件属于其它安全域,则在 applicationDomain 中指定的域将被忽略。有关详细信息,请参阅第 603页的 “使用 ApplicationDomain 类”。
有关详细信息,请参阅第 362页的 “指定加载上下文” 。
Loader 对象的一个重要属性就是 contentLoaderInfo 属性,该属性是一个 LoaderInfo 对象。与大部分对象不同, LoaderInfo 对象在执行加载的 SWF 文件和被加载的内容之间共享,并且双方始终可以访问该对象。当被加载的内容为 SWF 文件时,它可以通过DisplayObject.loaderInfo 属性访问 LoaderInfo 对象。 LoaderInfo 对象包括诸如加载进度、加载方和被加载方的 URL、加载方和被加载方之间的信任关系等信息及其它信息。
有关详细信息,请参阅第 361页的 “监视加载进度” 。
热门文章推荐
- [HLS]做自己的m3u8点播系统使用HTTP Live Streaming(HLS技术)
- [FMS]FMS流媒体服务器配置与使用相关的介绍
- [AS3]什么是M3U8,与HTML5的区别是什么
- AS2.0 让flash自适应全屏,并且不自动缩放
- [AS3]as3.0的sound类常用技巧整理
- [AS3]as3与ByteArray详解、ByteArray介绍、ByteArray用法
- 关于RTMP,RTMPT,RTMPS,RTMPE,RTMPTE协议的介绍
- [JS]分享浏览器弹出窗口不被拦截JS示例