加载内容

SWF 文件可以加载以下内容类型:

子主题

加载 SWF 文件和图像
加载声音和视频
使用文本字段中的 <img> 标签加载 SWF 文件和图像
使用 RTMP 服务器传送的内容

加载 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.unknown.example.com/content.swf";
var urlReq:URLRequest = new URLRequest(url);
ldr.load(urlReq);
addChild(ldr);

当调用 Loader 对象的 load() 方法时,可以指定一个 context 参数,该参数是一个 LoaderContext 对象。LoaderContext 类包括三个属性,用于定义如何使用加载的内容的上下文:

有关详细信息,请参阅指定加载上下文

Loader 对象的一个重要属性就是 contentLoaderInfo 属性,该属性是一个 LoaderInfo 对象。与大部分对象不同,LoaderInfo 对象在执行加载的 SWF 文件和被加载的内容之间共享,并且双方始终可以访问该对象。当被加载的内容为 SWF 文件时,它可以通过 DisplayObject.loaderInfo 属性访问 LoaderInfo 对象。LoaderInfo 对象包括诸如加载进度、加载方和被加载方的 URL、加载方和被加载方之间的信任关系等信息及其它信息。有关详细信息,请参阅监视加载进度

加载声音和视频

除只能与本地文件系统内容交互的沙箱中的那些 SWF 文件之外,所有 SWF 文件都允许从网络来源加载声音和视频,使用 Sound.load()NetConnection.connect()NetStream.play() 方法即可。

只有本地 SWF 文件才能从本地文件系统加载媒体。只有只能与本地文件系统内容交互的沙箱或受信任的本地沙箱中的 SWF 文件才能访问这些加载文件中的数据。

对加载的媒体还存在一些其它数据访问限制。有关详细信息,请参阅作为数据访问加载的媒体

使用文本字段中的 <img> 标签加载 SWF 文件和图像

通过使用 <img> 标签,可以将 SWF 文件和位图加载到文本字段中,如以下代码所示:

<img src = 'filename.jpg' id = 'instanceName' >

通过使用 TextField 实例的 getImageReference() 方法,可以访问以这种方式加载的内容,如以下代码所示:

var loadedObject:DisplayObject = myTextField.getImageReference('instanceName');

但是请注意,以这种方式加载的 SWF 文件和图像会被放入与各自来源相应的沙箱中。

当在文本字段中使用 <img> 标签加载图像文件时,通过跨域策略文件可以允许访问图像中的数据。通过将 checkPolicyFile 属性添加到 <img> 标签上,可以检查是否存在策略文件,如以下代码所示:

<img src = 'filename.jpg' checkPolicyFile = 'true' id = 'instanceName' >

当在文本字段中使用 <img> 标签加载 SWF 时,可以允许通过调用 Security.allowDomain() 方法来访问该 SWF 文件的数据。

当在文本字段中使用 <img> 标签加载外部文件时(相对于使用嵌在 SWF 文件中的 Bitmap 类),会自动创建一个 Loader 对象作为 TextField 对象的子对象,并且会将外部文件加载到该 Loader 对象中,就如同使用了 ActionScript 中的 Loader 对象来加载文件一样。在这种情况下,getImageReference() 方法返回自动创建的 Loader。由于此 Loader 对象与调用代码位于同一安全沙箱中,因此访问此对象不需要任何安全检查。

但是,当引用 Loader 对象的 content 属性来访问加载的媒体时,需要应用安全性规则。如果内容是图像,则需要实现跨域策略文件;如果内容是 SWF 文件,则需要让 SWF 文件中的代码调用 allowDomain() 方法。

使用 RTMP 服务器传送的内容

Flash Media Server 使用实时媒体协议 (RTMP) 提供数据、音频和视频。SWF 文件通过使用 NetConnection 类的 connect() 方法并作为参数传递 RTMP URL 来加载此媒体。Flash Media Server 可以根据所请求文件的域来限制连接并防止内容被下载。有关详细信息,请参阅 Flash Media Server 文档。

对于从 RTMP 源加载的媒体,不能使用 BitmapData.draw()SoundMixer.computeSpectrum() 方法来提取运行时图形和声音数据。


Flash CS3

 

评论添加到页面后给我发送电子邮件 | 评论报告

当前页: http://livedocs.adobe.com/flash/9.0_cn/main/00000353.html