window.runtime 属性window.runtime.flash.media.SoundLoaderContext
继承SoundLoaderContext Inheritance Object

SoundLoaderContext 类为加载声音的 文件提供安全检查。 SoundLoaderContext 对象以参数的形式传递到构造函数和 Sound 类的 load() 方法。

在使用此类时,请考虑以下安全模型:

但在 Adobe AIR 中,application 安全沙箱中的内容(使用 AIR 应用程序安装的内容)不受这些安全限制的约束。

有关详细信息,请参阅以下部分:



属性
 属性定义方
  bufferTime : Number = 1000
在开始传输声音流之前,将其预加载到缓冲区中所用的秒数。
SoundLoaderContext
  checkPolicyFile : Boolean = false
指定应用程序在开始加载声音之前,是否应尝试从所加载声音的服务器中下载跨域策略文件。
SoundLoaderContext
 Inheritedconstructor : Object
对类对象或给定对象实例的构造函数的引用。
Object
 Inheritedprototype : Object
[静态] 对类或函数对象的原型对象的引用。
Object
公共方法
 方法定义方
  
SoundLoaderContext(bufferTime:Number = 1000, checkPolicyFile:Boolean = false)
创建新的声音加载器上下文对象。
SoundLoaderContext
 Inherited
hasOwnProperty(name:String):Boolean
指示对象是否已经定义了指定的属性。
Object
 Inherited
isPrototypeOf(theClass:Object):Boolean
指示 Object 类的实例是否在指定为参数的对象的原型链中。
Object
 Inherited
propertyIsEnumerable(name:String):Boolean
指示指定的属性是否存在、是否可枚举。
Object
 Inherited
setPropertyIsEnumerable(name:String, isEnum:Boolean = true):void
设置循环操作动态属性的可用性。
Object
 Inherited
toString():String
返回指定对象的字符串表示形式。
Object
 Inherited
valueOf():Object
返回指定对象的原始值。
Object
属性详细信息
bufferTime属性
var bufferTime:Number = 1000

在开始传输声音流之前,将其预加载到缓冲区中所用的秒数。

请注意,无法通过设置全局 SoundMixer.bufferTime 属性来覆盖 SoundLoaderContext.bufferTime 的值。SoundMixer.bufferTime 属性影响 SWF 文件中嵌入声音流的缓冲时间,该属性与动态创建的 Sound 对象(即在 ActionScript 中创建的 Sound 对象)无关。

checkPolicyFile属性 
var checkPolicyFile:Boolean = false

指定应用程序在开始加载声音之前,是否应尝试从所加载声音的服务器中下载跨域策略文件。此属性应用于使用 Sound.load() 方法从执行调用的 文件自己的域外加载的声音。

如果从执行调用的文件自己的域外加载声音,并且执行调用的文件中的代码需要对声音数据进行低级访问,请将此属性设置为 true。对声音数据进行低级访问的示例包括引用 Sound.id3 属性以获取 ID3Info 对象,或调用 SoundMixer.computeSpectrum() 方法以便从加载的声音中获取声音样本。如果在加载时没有将 checkPolicyFile 属性设置为 true 的情况下尝试访问声音数据,则可能会出现 SecurityError 异常,因为尚未下载所需的策略文件。

如果不需要对正在加载的声音数据进行低级访问,请避免将 checkPolicyFile 设置为 true。检查策略文件会占用网络带宽并且可能会延迟下载的开始时间,因此只应在必要时才执行此操作。

如果在将 SoundLoaderContext.checkPolicyFile 设置为 true 的情况下调用 Sound.load(),则 Flash Player 或 Adobe AIR 必须在开始下载指定的声音之前成功下载相关的跨域策略文件,或确定不存在这样的策略文件。Flash Player 或 AIR 将按此顺序执行下列操作,以验证策略文件是否存在:

无论哪种情况,Flash Player 或 AIR 都要求声音服务器上存在一个正确的策略文件,该文件可以提供对 URLRequest.url 上的声音文件的访问(根据该策略文件的位置),并允许执行调用的文件所在的域通过一个或多个 <allow-access-from> 标签来访问该声音。

如果将 checkPolicyFile 设置为 true,则 Flash Player 或 AIR 会等到策略文件验证完成后再加载声音。应该等到从 Sound 对象调度了 progresscomplete 事件后再对声音数据执行任何低级操作,如调用 Sound.id3SoundMixer.computeSpectrum()

如果将 checkPolicyFile 设置为 true,但未找到适当的策略文件,则只有在执行需要策略文件的操作时才会收到错误,然后,Flash Player 或 AIR 会引发 SecurityError 异常。收到 complete 事件后,通过在 try 块内获取 Sound.id3 的值,并查看是否会引发 SecurityError,您可以测试是否已找到相关策略文件。

如果正在从使用服务器端 HTTP 重定向的 URL 中下载声音,请谨慎使用 checkPolicyFileFlash Player 或 AIR 尝试检索与传递到 Sound.load() 的 URLRequest 对象的 url 属性相对应的策略文件。如果最终声音文件由于 HTTP 重定向而来自不同的 URL,那么,最初下载的策略文件可能不适用于声音的最终 URL,此 URL 与安全决策相关。

如果发生此情况,这里有一个可能的解决方案。收到 progresscomplete 事件后,可以检查包含声音的最终 URL 的 Sound.url 属性值。然后用根据声音的最终 URL 计算的策略文件 URL 调用 Security.loadPolicyFile() 方法。最后,轮询 Sound.id3 的值,直到没有引发异常为止。

有关策略文件的详细信息,请参阅《ActionScript 3.0 编程》中的“Flash Player 安全性”一章。

另请参见

构造函数详细信息
SoundLoaderContext()构造函数
function SoundLoaderContext(bufferTime:Number = 1000, checkPolicyFile:Boolean = false)

创建新的声音加载器上下文对象。

参数
bufferTime:Number (default = 1000) — 在开始传输声音流之前,将其预加载到缓冲区中所用的秒数。
 
checkPolicyFile:Boolean (default = false) — 指定在加载对象时是否应检查跨域策略文件是否存在,如果是,则为 true