加载内容Flash Player 9 和更高版本,Adobe AIR 1.0 和更高版本 Flash Player 和 AIR 内容可加载多种类型的其他内容,其中包括:
使用 Loader 类加载 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、加载方和被加载方之间的信任关系等信息及其他信息。有关详细信息,请参阅监视加载进度。 加载声音和视频允许任何内容使用 Sound.load()、NetConnection.connect() 和 NetStream.play() 方法从网络源加载声音和视频,只能与本地文件系统内容交互的沙箱中的内容除外。 只有只能与本地文件系统内容交互的沙箱和 AIR 应用程序沙箱中的内容可以从本地文件系统中加载媒体。只有只能与本地文件系统内容交互的沙箱、AIR 应用程序沙箱或受信任的本地沙箱中的内容可以访问这些加载的文件中的数据。 对加载的媒体还存在一些其他数据访问限制。有关详细信息,请参阅作为数据访问加载的媒体。 使用文本字段中的 <img> 标签加载 SWF 文件和图像通过使用 <img> 标签,可以将 SWF 文件和位图加载到文本字段中,如以下代码所示: <img src = 'filename.jpg' id = 'instanceName' > 通过使用 TextField 实例的 getImageReference() 方法,可以访问以这种方式加载的内容,如以下代码所示: var loadedObject:DisplayObject = myTextField.getImageReference('instanceName'); 但是请注意,以这种方式加载的 SWF 文件和图像会被放入与各自来源相应的沙箱中。 当在文本字段中使用 <img> 标签加载图像文件时,通过 URL 策略文件可以允许访问图像中的数据。通过将 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 属性来访问加载的媒体时,需要应用安全性规则。如果内容是图像,则需要实现 URL 策略文件;如果内容是 SWF 文件,则需要让 SWF 文件中的代码调用 allowDomain() 方法。 Adobe AIR在应用程序沙箱内,将忽略文本字段中的 <img> 标签以防止仿冒攻击。此外,不允许在应用程序沙箱中运行的代码调用 Security allowDomain() 方法。 使用 RTMP 服务器传送的内容Flash Media Server 使用实时媒体协议 (RTMP) 提供数据、音频和视频。您可以使用 NetConnection 类的 connect() 方法将 RTMP URL 作为参数传递来加载此媒体。Flash Media Server 可以根据所请求文件的域来限制连接并防止内容被下载。有关详细信息,请参阅 www.adobe.com/go/learn_fms_docs_cn 上提供的在线 Flash Media Server 文档。 要使用 BitmapData.draw() 和 SoundMixer.computeSpectrum() 方法从 RTMP 流提取运行时图形和声音数据,必须拥有对服务器的访问权限。使用服务器端 ActionScript Client.videoSampleAccess 和 Client.audioSampleAccess 属性允许访问 Flash Media Server 上的特定目录。有关详细信息,请参阅 Server-Side ActionScript Language Reference。 |
|