flash.systemImageDecodingPolicy ImageDecodingPolicy 类定义 LoaderContext 类的 imageDecodingPolicy 属性值。ImageDecodingPolicy 类定义 LoaderContext 类的 imageDecodingPolicy 属性值。 Object ImageDecodingPolicy 类定义 LoaderContext 类的 imageDecodingPolicy 属性值。 LoaderContext.imageDecodingPolicyON_DEMAND 指定加载的图像前直到需要时才进行解码。onDemandString 指定加载的图像前直到需要时才进行解码。 ON_LOAD 指定图像在加载时进行解码,即发送 complete 事件之前。onLoadString 指定图像在加载时进行解码,即发送 complete 事件之前。 SystemUpdaterType SystemUpdaterType 类为系统更新提供常量。Object SystemUpdaterType 类为系统更新提供常量。这些常量在 SystemUpdater.update() 函数中使用。

注意:桌面平台上支持 SystemUpdater API。

DRM 更新 DRM 模块。drmString 更新 DRM 模块。 SYSTEM 更新 Player 运行时本身。systemString 更新 Player 运行时本身。
IMEConversionMode 这个类包含与 IME.conversionMode 属性配合使用的常量。Object 这个类包含与 IME.conversionMode 属性配合使用的常量。将 conversionMode 设置为 ALPHANUMERIC_FULLJAPANESE_KATAKANA_FULL 时,播放器将使用全角字体,而设置为 ALPHANUMERIC_HALFJAPANESE_KATAKANA_HALF 时将使用半角字体。 flash.system.IME.conversionModeALPHANUMERIC_FULL 字符串“ALPHANUMERIC_FULL”,与 IME.conversionMode 属性配合使用。ALPHANUMERIC_FULLString 字符串 "ALPHANUMERIC_FULL",与 IME.conversionMode 属性配合使用。此常量可以与所有 IME 配合使用。使用语法 IMEConversionMode.ALPHANUMERIC_FULLflash.system.IME.conversionModeALPHANUMERIC_HALF 字符串“ALPHANUMERIC_HALF”,与 IME.conversionMode 属性配合使用。ALPHANUMERIC_HALFString 字符串 "ALPHANUMERIC_HALF",与 IME.conversionMode 属性配合使用。此常量可以与所有 IME 配合使用。使用语法 IMEConversionMode.ALPHANUMERIC_HALFflash.system.IME.conversionModeCHINESE 字符串“CHINESE”,与 IME.conversionMode 属性配合使用。CHINESEString 字符串 "CHINESE",与 IME.conversionMode 属性配合使用。此常量用于与简体中文 IME 和繁体中文 IME 配合使用。使用语法 IMEConversionMode.CHINESEflash.system.IME.conversionModeJAPANESE_HIRAGANA 字符串“JAPANESE_HIRAGANA”,与 IME.conversionMode 属性配合使用。JAPANESE_HIRAGANAString 字符串 "JAPANESE_HIRAGANA",与 IME.conversionMode 属性配合使用。此常量用于与日语 IME 配合使用。使用语法 IMEConversionMode.JAPANESE_HIRAGANAflash.system.IME.conversionModeJAPANESE_KATAKANA_FULL 字符串“JAPANESE_KATAKANA_FULL”,与 IME.conversionMode 属性配合使用。JAPANESE_KATAKANA_FULLString 字符串 "JAPANESE_KATAKANA_FULL",与 IME.conversionMode 属性配合使用。此常量用于与日语 IME 配合使用。使用语法 IMEConversionMode.JAPANESE_KATAKANA_FULLflash.system.IME.conversionModeJAPANESE_KATAKANA_HALF 字符串“JAPANESE_KATAKANA_HALF”,与 IME.conversionMode 属性配合使用。JAPANESE_KATAKANA_HALFString 字符串 "JAPANESE_KATAKANA_HALF",与 IME.conversionMode 属性配合使用。此常量用于与日语 IME 配合使用。使用语法 IMEConversionMode.JAPANESE_KATAKANA_HALFflash.system.IME.conversionModeKOREAN 字符串“KOREAN”,与 IME.conversionMode 属性配合使用。KOREANString 字符串 "KOREAN",与 IME.conversionMode 属性配合使用。此常量用于与韩语 IME 配合使用。使用语法 IMEConversionMode.KOREANflash.system.IME.conversionModeUNKNOWN 字符串“UNKNOWN”,调用 IME.conversionMode 属性时可返回此字符串。UNKNOWNString 字符串 "UNKNOWN",可通过调用 IME.conversionMode 属性返回它。此值无法被设置,并且仅在播放器无法识别当前活动的 IME 时返回。使用语法 IMEConversionMode.UNKNOWNflash.system.IME.conversionModeSecurityPanel SecurityPanel 类提供一些值,用来指定您希望显示的“安全设置”面板。Object SecurityPanel 类提供一些值,用来指定您希望显示的“安全设置”面板。

此类包含与 Security.showSettings() 方法一起使用的静态常量。您无法创建 SecurityPanel 类的新实例。

下例显示如何使用 Sprite 对象上的 click 事件显示“Flash Player 设置”中的“本地存储设置”面板。使用 draw() 将一个橙色框添加到舞台上。在 draw() 中,通过指示 Flash Player 打开其“本地存储设置”面板,将 click 事件侦听器以名称 clickHandler() 添加进来,它对应于 click 事件。 package { import flash.display.Sprite; import flash.text.TextField; import flash.events.*; import flash.system.Security; import flash.system.SecurityPanel; public class SecurityExample extends Sprite { private var bgColor:uint = 0xFFCC00; private var size:uint = 100; public function SecurityExample() { draw(); } private function draw():void { var child:Sprite = new Sprite(); child.graphics.beginFill(bgColor); child.graphics.drawRect(0, 0, size, size); child.graphics.endFill(); child.buttonMode = true; var label:TextField = new TextField(); label.text = "settings"; label.selectable = false; label.mouseEnabled = false; child.addChild(label); child.addEventListener(MouseEvent.CLICK, clickHandler); addChild(child); } private function clickHandler(event:MouseEvent):void { Security.showSettings(SecurityPanel.LOCAL_STORAGE); } } }
CAMERA 当传递给 Security.showSettings() 时,显示“Flash Player 设置”中的“摄像头”面板。cameraString 当传递给 Security.showSettings() 时,显示“Flash Player 设置”中的“摄像头”面板。 Security.showSettings()DEFAULT 当传递给 Security.showSettings() 时,显示用户上次关闭“Flash Player 设置”时处于打开状态的面板。defaultString 当传递给 Security.showSettings() 时,显示用户上次关闭“Flash Player 设置”时处于打开状态的面板。 Security.showSettings()DISPLAY 当传递给 Security.showSettings() 时,显示“Flash Player 设置”中的“显示”面板。displayString 当传递给 Security.showSettings() 时,显示“Flash Player 设置”中的“显示”面板。 Security.showSettings()LOCAL_STORAGE 当传递给 Security.showSettings() 时,显示“Flash Player 设置”中的“本地存储设置”面板。localStorageString 当传递给 Security.showSettings() 时,显示“Flash Player 设置”中的“本地存储设置”面板。 Security.showSettings()MICROPHONE 当传递给 Security.showSettings() 时,显示“Flash Player 设置”中的“麦克风”面板。microphoneString 当传递给 Security.showSettings() 时,显示“Flash Player 设置”中的“麦克风”面板。 Security.showSettings()PRIVACY 当传递给 Security.showSettings() 时,显示“Flash Player 设置”中的“隐私设置”面板。privacyString 当传递给 Security.showSettings() 时,显示“Flash Player 设置”中的“隐私设置”面板。 Security.showSettings()SETTINGS_MANAGER 当传递给 Security.showSettings() 时,显示“设置管理器”(在一个单独的浏览器窗口中)。settingsManagerString 当传递给 Security.showSettings() 时,显示“设置管理器”(在一个单独的浏览器窗口中)。 Security.showSettings()
TouchscreenType TouchscreenType 类是枚举类,为不同类型的触摸屏提供值。Object TouchscreenType 类是枚举类,为不同类型的触摸屏提供值。

将 TouchscreenType 类定义的值与 Capabilities.touchscreenType 属性配合使用。

以下示例是一个简单测试,用于指示运行环境中“Num Lock”和“Caps Lock”键的当前状态以及键盘类型和触摸屏类型。测试该示例时,单击文本字段可查看属性值: import flash.events.~~; import flash.display.~~; import flash.ui.Keyboard; import flash.system.Capabilities; import flash.text.TextField; var keyboardInfoTxt:TextField = new TextField(); keyboardInfoTxt.x = 30; keyboardInfoTxt.y = 50; keyboardInfoTxt.width = 300; keyboardInfoTxt.height = 100; keyboardInfoTxt.border = true; addChild(keyboardInfoTxt); addEventListener (MouseEvent.CLICK, getScreenKeyboardType); function getScreenKeyboardType(e:MouseEvent):void{ keyboardInfoTxt.text= "Caps Lock is : " + String(flash.ui.Keyboard.capsLock)+ "\n" + "Num Lock is : " + String(flash.ui.Keyboard.numLock) +"\n" + "Has Virtual Keyboard : " + String(flash.ui.Keyboard.hasVirtualKeyboard) + "\n" + "Physical Keyboard Type : " + flash.ui.Keyboard.physicalKeyboardType + "\n" + "flash.system.Capabilities.touchscreenType is : " + flash.system.Capabilities.touchscreenType; }
Capabilities.touchscreenTypeflash.ui.Mouse.supportsCursorFINGER 触摸屏经过专门设计,用于响应手指触摸。fingerString 触摸屏经过专门设计,用于响应手指触摸。 NONE 计算机或设备没有支持的触摸屏。noneString 计算机或设备没有支持的触摸屏。 STYLUS 触摸屏专用于与笔针配合使用。stylusString 触摸屏专用于与笔针配合使用。
ApplicationDomain ApplicationDomain 类是分散的类定义组的一个容器。Object ApplicationDomain 类是分散的类定义组的一个容器。应用程序域用于划分位于同一个安全域中的类。它们允许同一个类存在多个定义,并且允许子级重用父级定义。

在通过 Loader 类加载外部 SWF 文件时会使用应用程序域。加载的 SWF 文件中的所有 ActionScript 3.0 定义都存储在由 LoaderContext 对象的 applicationDomain 属性指定的应用程序域中,此对象是您为 Loader 对象的 load()loadBytes() 方法传递的 context 参数。LoaderInfo 对象还包含一个只读的 applicationDomain 属性。

SWF 文件中的所有代码被定义为存在于应用程序域中。主应用程序就在当前的应用程序域中运行。系统域中包含所有应用程序域(包括当前域),这意味着它包含所有 Flash Player 类。

除系统域以外,每个应用程序域都有一个关联的父域。主应用程序的应用程序域的父域是系统域。已加载的类仅在其父级中没有相关定义时才进行定义。不能用较新的定义覆盖已加载的类定义。

有关应用程序域的用法示例,请参阅《ActionScript 3.0 开发人员指南》

使用 ApplicationDomain() 构造函数可以创建 ApplicationDomain 对象。

下例演示了如何加载运行时类,以及如何调用位于另一个 SWF 中的类的公共方法。

注意:

  • 由于 ClassLoader 类要加载 SWF 文件,因此需要文件系统级别的本地安全性。
  • 要运行此示例,在 ApplicationDomainExample.swf 文件所在的文件夹中必须存在一个名为 RuntimeClasses.swf 的 SWF 文件。

首先,使用下面的代码创建 RuntimeClasses.swf 文件:

package { import flash.display.Sprite; public class RuntimeClasses extends Sprite { public function RuntimeClasses() {} public function greet():String { return("Hello World"); } } }

然后实现下面的代码:

package { import flash.display.DisplayObject; import flash.display.Sprite; import flash.errors.IllegalOperationError; import flash.events.Event; import flash.text.TextField; public class ApplicationDomainExample extends Sprite { private var loader:ClassLoader; private var tf:TextField = new TextField(); public function ApplicationDomainExample() { addChild(tf); loader = new ClassLoader(); loader.addEventListener(ClassLoader.LOAD_ERROR,loadErrorHandler); loader.addEventListener(ClassLoader.CLASS_LOADED,classLoadedHandler); loader.load("RuntimeClasses.swf"); } private function loadErrorHandler(e:Event):void { tf.text = "Load failed"; throw new IllegalOperationError("Cannot load the specified file."); } private function classLoadedHandler(e:Event):void { var runtimeClassRef:Class = loader.getClass("RuntimeClasses"); var greeter:Object = new runtimeClassRef(); tf.text = greeter.greet(); } } } import flash.display.Loader; import flash.errors.IllegalOperationError; import flash.events.Event; import flash.events.EventDispatcher; import flash.events.IOErrorEvent; import flash.events.SecurityErrorEvent; import flash.net.URLRequest; import flash.system.ApplicationDomain; import flash.system.LoaderContext; class ClassLoader extends EventDispatcher { public static var CLASS_LOADED:String = "classLoaded"; public static var LOAD_ERROR:String = "loadError"; private var loader:Loader; private var swfLib:String; private var request:URLRequest; private var loadedClass:Class; public function ClassLoader() { loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE,completeHandler); loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler); loader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR,securityErrorHandler); } public function load(lib:String):void { swfLib = lib; request = new URLRequest(swfLib); var context:LoaderContext = new LoaderContext(); context.applicationDomain=ApplicationDomain.currentDomain; loader.load(request,context); } public function getClass(className:String):Class { try { return loader.contentLoaderInfo.applicationDomain.getDefinition(className) as Class; } catch (e:Error) { throw new IllegalOperationError(className + " definition not found in " + swfLib); } return null; } private function completeHandler(e:Event):void { dispatchEvent(new Event(ClassLoader.CLASS_LOADED)); } private function ioErrorHandler(e:Event):void { dispatchEvent(new Event(ClassLoader.LOAD_ERROR)); } private function securityErrorHandler(e:Event):void { dispatchEvent(new Event(ClassLoader.LOAD_ERROR)); } }
如果有多个 SWF 文件中包含名称相同但实现方式不同的编译类,可以根据此示例将外部加载的 SWF 文件的类相互区分开来。先前,已指示子 SWF 使用 ApplicationDomain.currentDomain。在本例中,创建一个新的 ApplicationDomain,因此无论 SWF 第二次加载哪一个 Greeter 类,该类的属性和方法都不会替换第一个 Greeter 类的属性和方法。您可以通过修改 ClassLoaderload 方法中的 context.applicationDomain 属性来测试这一点。

注意:

  • 由于 ClassLoader 类要加载 SWF 文件,因此需要文件系统级别的本地安全性。
  • 要运行此示例,必须存在两个名为 Greeter.swf 的 SWF 文件,分别位于“en”和“es”文件夹中。

使用以下代码在“en”目录下创建一个 Greeter.as 文件:

package { import flash.display.Sprite; public class Greeter extends Sprite { public function Greeter() { } public function greet():String { return("Good Morning"); } } }

然后在“es”目录下创建一个十分相似的 Greeter.as 文件:

package { import flash.display.Sprite; public class Greeter extends Sprite { public function Greeter() { } public function greet():String { return("Buenos Dias"); } } }

编译两个 SWF 文件,然后实现以下代码:

package { import flash.display.DisplayObject; import flash.display.Sprite; import flash.errors.IllegalOperationError; import flash.events.Event; import flash.text.TextField; import flash.text.TextFieldAutoSize; public class ApplicationDomainExample2 extends Sprite { private var spanishGreeterLoader:ClassLoader; private var englishGreeterLoader:ClassLoader; private var tf:TextField = new TextField(); private var greetersLoaded:uint = 0; public function ApplicationDomainExample2() { tf.autoSize = TextFieldAutoSize.LEFT; addChild(tf); spanishGreeterLoader = new ClassLoader(); spanishGreeterLoader.addEventListener(ClassLoader.LOAD_ERROR,loadErrorHandler); spanishGreeterLoader.addEventListener(ClassLoader.CLASS_LOADED,classLoadedHandler); spanishGreeterLoader.load("es/Greeter.swf"); englishGreeterLoader = new ClassLoader(); englishGreeterLoader.addEventListener(ClassLoader.LOAD_ERROR,loadErrorHandler); englishGreeterLoader.addEventListener(ClassLoader.CLASS_LOADED,classLoadedHandler); englishGreeterLoader.load("en/Greeter.swf"); } private function loadErrorHandler(e:Event):void { tf.text = "Load failed"; throw new IllegalOperationError("Cannot load the specified file."); } private function classLoadedHandler(e:Event):void { greetersLoaded++; if(greetersLoaded == 2) { greet(); } } private function greet():void { var spanishGreeter:Class = spanishGreeterLoader.getClass("Greeter"); var englishGreeter:Class = englishGreeterLoader.getClass("Greeter"); var greeter1 = new spanishGreeter(); var greeter2 = new englishGreeter(); tf.text = greeter1.greet() + "\n" + greeter2.greet(); } } } import flash.display.Loader; import flash.errors.IllegalOperationError; import flash.events.Event; import flash.events.EventDispatcher; import flash.events.IOErrorEvent; import flash.events.SecurityErrorEvent; import flash.net.URLRequest; import flash.system.ApplicationDomain; import flash.system.LoaderContext; class ClassLoader extends EventDispatcher { public static var CLASS_LOADED:String = "classLoaded"; public static var LOAD_ERROR:String = "loadError"; private var loader:Loader; private var swfLib:String; private var request:URLRequest; private var loadedClass:Class; public function ClassLoader() { loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE,completeHandler); loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler); loader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR,securityErrorHandler); } public function load(lib:String):void { swfLib = lib; request = new URLRequest(swfLib); var context:LoaderContext = new LoaderContext(); // context.applicationDomain = ApplicationDomain.currentDomain; context.applicationDomain = new ApplicationDomain(); loader.load(request,context); } public function getClass(className:String):Class { try { return loader.contentLoaderInfo.applicationDomain.getDefinition(className) as Class; } catch (e:Error) { throw new IllegalOperationError(className + " definition not found in " + swfLib); } return null; } private function completeHandler(e:Event):void { dispatchEvent(new Event(ClassLoader.CLASS_LOADED)); } private function ioErrorHandler(e:Event):void { dispatchEvent(new Event(ClassLoader.LOAD_ERROR)); } private function securityErrorHandler(e:Event):void { dispatchEvent(new Event(ClassLoader.LOAD_ERROR)); } }
flash.display.Loader.load()flash.display.Loader.loadBytes()flash.display.LoaderInfoflash.net.URLRequestflash.system.LoaderContextApplicationDomain 创建一个新的应用程序域。parentDomainflash.system:ApplicationDomainnull如果未传入父域,此应用程序域将使用系统域作为其父域。 创建一个新的应用程序域。 getDefinition 从指定的应用程序域获取一个公共定义。不存在具有指定名称的公共定义。 ReferenceErrorReferenceError与此定义关联的对象。 ObjectnameString定义的名称。 从指定的应用程序域获取一个公共定义。该定义可以是一个类、一个命名空间或一个函数的定义。 hasDefinition 检查指定的应用程序域之内是否存在一个公共定义。如果指定的定义存在,则返回 true 值;否则,返回 falseBooleannameString定义的名称。 检查指定的应用程序域之内是否存在一个公共定义。该定义可以是一个类、一个命名空间或一个函数的定义。 MIN_DOMAIN_MEMORY_LENGTH 获取用作 ApplicationDomain.domainMemory 所需的最小内存对象长度。uint 获取用作 ApplicationDomain.domainMemory 所需的最小内存对象长度。 currentDomain 获取正在其中执行代码的当前应用程序域。flash.system:ApplicationDomain 获取正在其中执行代码的当前应用程序域。 domainMemory 获取并设置将在此 ApplicationDomain 中对其执行域全局内存操作的对象。flash.utils:ByteArray 获取并设置将在此 ApplicationDomain 中对其执行域全局内存操作的对象。 parentDomain 获取该应用程序域的父域。flash.system:ApplicationDomain 获取该应用程序域的父域。
Security 通过使用 Security 类,可以指定不同域中的内容相互通信的方式。Object 通过使用 Security 类,可以指定不同域中的内容相互通信的方式。 下例显示如何使用 Sprite 对象上的 click 事件显示“Flash Player 设置”中的“本地存储设置”面板。使用 draw() 将一个橙色框添加到舞台上。在 draw() 中,通过指示 Flash Player 打开其“本地存储设置”面板,将 click 事件侦听器以名称 clickHandler() 添加进来,它对应于 click 事件。 package { import flash.display.Sprite; import flash.text.TextField; import flash.events.*; import flash.system.Security; import flash.system.SecurityPanel; public class SecurityExample extends Sprite { private var bgColor:uint = 0xFFCC00; private var size:uint = 100; public function SecurityExample() { draw(); } private function draw():void { var child:Sprite = new Sprite(); child.graphics.beginFill(bgColor); child.graphics.drawRect(0, 0, size, size); child.graphics.endFill(); child.buttonMode = true; var label:TextField = new TextField(); label.text = "settings"; label.selectable = false; label.mouseEnabled = false; child.addChild(label); child.addEventListener(MouseEvent.CLICK, clickHandler); addChild(child); } private function clickHandler(event:MouseEvent):void { Security.showSettings(SecurityPanel.LOCAL_STORAGE); } } } allowDomain 允许所标识的域中的 SWF 文件访问包含 allowDomain() 调用的 SWF 文件中的对象和变量。从 AIR 应用程序安全沙箱中的代码调用此方法会引发 SecurityError 异常。应用程序安全沙箱以外的内容不能跨脚本访问应用程序安全沙箱中的内容。 SecurityErrorSecurityErrordomains一个或多个字符串或者 URLRequest 对象,它们可命名一些您希望允许从中进行访问的域。可指定特殊域“*”,以允许从所有域进行访问。

在 Flash Professional 中,为了从使用 Flash 创作工具中“本地播放安全性”选项的“只访问网络”发布的本地 SWF 文件访问非本地 SWF 文件,指定“~~”是唯一的方法。

注意:通配符值在子域中不起作用。例如,不能在 domains 参数中使用 ~~.foo.com。您可以为跨域策略文件指定带有通配符值的子域(比如在 ~~.foo.com 中),但是不能以同样方式为 allowDomain() 方法使用通配符值。

使 SWF 文件和 HTML 文件访问执行调用的 SWF 文件中的对象和变量。
允许所标识的域中的 SWF 文件访问包含 allowDomain() 调用的 SWF 文件中的对象和变量。

注意:从 AIR 应用程序沙箱中的代码调用此方法会引发 SecurityError 异常。应用程序安全域以外的内容不能直接跨脚本访问应用程序沙箱中的内容。不过,应用程序沙箱以外的内容可以使用沙箱桥与应用程序安全沙箱中的内容进行通信。

如果两个 SWF 文件来自同一个域(例如,http://mysite.com/swfA.swf 和 http://mysite.com/swfB.swf),则 swfA.swf 可以检查和修改 swfB.swf 中的变量、对象、属性、方法等,而且 swfB.swf 也可以对 swfA.swf 执行同样的操作。这被称为跨影片脚本编写跨脚本编写

如果两个 SWF 文件来自不同的域(例如,http://siteA.com/swfA.swf 和 http://siteB.com/siteB.swf),则在默认情况下,Flash Player 既不允许 swfA.swf 编写 swfB.swf 的脚本,也不允许 swfB.swf 编写 swfA.swf 的脚本。通过调用 Security.allowDomain(),一个 SWF 文件可向其他域中的 SWF 文件授予权限。这称为跨域脚本编写。通过调用 Security.allowDomain("siteA.com"),siteB.swf 可授予 siteA.swf 编写其脚本的权限。

在任何跨域的情况下,明确所涉及的双方非常重要。为了便于进行此讨论,我们将执行跨脚本编写的一方称为访问方(通常是执行访问的 SWF),将另一方称为被访问方(通常是被访问的 SWF 文件)。当 siteA.swf 编写 siteB.swf 的脚本时,siteA.swf 是访问方,siteB.swf 是被访问方。

使用 allowDomain() 建立的跨域权限是不对称的。在上一个示例中,siteA.swf 可以编写 siteB.swf 的脚本,但 siteB.swf 无法编写 siteA.swf 的脚本,这是因为 siteA.swf 未调用 allowDomain() 来授予 siteB.com 中的 SWF 文件编写其脚本的权限。可以通过让两个 SWF 文件都调用 allowDomain() 来设置对称权限。

除了防止 SWF 文件受到其他 SWF 文件发起的跨域脚本编写影响外,Flash Player 还可防止 SWF 文件受到 HTML 文件发起的跨域脚本编写的影响。可以使用旧版本的 浏览器函数(如 SetVariable)或通过 ExternalInterface.addCallback() 创建的回调执行 HTML 到 SWF 的脚本编写。当 HTML 到 SWF 的脚本编写跨域时,被访问的 SWF 文件必须调用 allowDomain()(这与访问方是一个 SWF 文件时一样),否则操作将失败。

如果将 IP 地址指定为 allowDomain() 的参数,则不允许所有源自指定 IP 地址的访问方进行访问。相反,只允许 URL 中包含指定 IP 地址的访问方进行访问,而不是允许其域名映射到该 IP 地址的访问方进行访问。

特定于版本的差异

Flash Player 的跨域安全性规则随着版本的升级发生了演变。下表概述了这些差异。

涉及跨脚本编写的最新 SWF 版本是否需要 allowDomain()是否需要 allowInsecureDomain()哪个 SWF 文件必须调用 allowDomain()allowInsecureDomain()allowDomain()allowInsecureDomain() 中可以指定哪些内容?第 5 版或更低版本不适用不适用6是的,如果超级域不匹配被访问的 SWF 文件,或者任何与被访问的 SWF 文件具有相同超级域的 SWF 文件
  • 基于文本的域 (mysite.com)
  • IP 地址 (192.168.1.1)
7是的,如果域不是完全匹配是的,如果执行 HTTP 到 HTTPS 的访问(即使域完全匹配)被访问的 SWF 文件,或者任何与被访问的 SWF 文件具有完全相同域的 SWF 文件
  • 基于文本的域 (mysite.com)
  • IP 地址 (192.168.1.1)
第 8 版或更高版本是的,如果域不是完全匹配是的,如果执行 HTTP 到 HTTPS 的访问(即使域完全匹配)被访问的 SWF 文件
  • 基于文本的域 (mysite.com)
  • IP 地址 (192.168.1.1)
  • 通配符 (*)

控制 Flash Player 行为的版本是 SWF 版本(SWF 文件的发布版本),而不是 Flash Player 本身的版本。例如,当 Flash Player 8 正在播放为第 7 版发布的 SWF 文件时,它应用与第 7 版一致的行为。这种做法可确保播放器升级不会更改已部署 SWF 文件中的 Security.allowDomain() 的行为。

上表中的版本列显示了涉及跨脚本编写操作的最新 SWF 版本。Flash Player 根据执行访问的 SWF 文件的版本或被访问的 SWF 文件的版本(以两者中的较高版本为准)来确定其行为。

下面的段落提供有关涉及 Security.allowDomain() 的 Flash Player 安全性更改的详细信息。

第 5 版。没有跨域脚本编写限制。

第 6 版。引入了跨域脚本编写安全性。默认情况下,Flash Player 禁止跨域脚本编写;Security.allowDomain() 可允许跨域脚本编写。为了确定两个文件是否处于同一域中,Flash Player 将使用每个文件的超级域(即文件 URL 中的完全主机名,去掉第一段,最少剩两段)。例如,www.mysite.com 的超级域为 mysite.com。来自 www.mysite.com 和 store.mysite.com 的 SWF 文件无需调用 Security.allowDomain() 就可以相互编写脚本。

第 7 版。超级域匹配更改为域完全匹配。仅在这两个文件的 URL 中的主机名完全相同时才允许它们相互编写脚本;否则需要调用 Security.allowDomain()。默认情况下,不再允许从非 HTTPS URL 加载的文件编写从 HTTPS URL 加载的文件的脚本,即使这些文件从完全相同的域加载也是如此。由于非 HTTPS 文件容易在下载的过程中被修改,而经过恶意修改的非 HTTPS 文件能破坏 HTTPS 文件,此限制可防止这样的篡改,所以有助于保护 HTTPS 文件。引入了 Security.allowInsecureDomain() 以允许被访问的 HTTPS SWF 文件自主禁用此限制,但不鼓励使用 Security.allowInsecureDomain()

第 8 版。主要有两项更改:

  • 现在,只有被访问的 SWF 文件是调用 Security.allowDomain() 的 SWF 文件时,调用 Security.allowDomain() 才允许跨脚本编写操作。也就是说,现在,调用 Security.allowDomain() 的 SWF 文件仅允许对其自身的访问。在以前的版本中,调用 Security.allowDomain() 允许跨脚本编写操作,其中被访问的 SWF 文件可以是与名为 Security.allowDomain() 的 SWF 文件在同一个域中的任何 SWF 文件。以前调用 Security.allowDomain() 会打开执行调用的 SWF 文件的整个域。
  • 已添加了对具有 Security.allowDomain("*")Security.allowInsecureDomain("*") 的通配符值的支持。通配符 (*) 值允许跨脚本编写操作,操作过程中执行访问的文件可以是从任何位置加载的任何文件。将通配符视为全局权限。根据本地文件安全性规则,需要具有通配符权限才能启用特定类型的操作。具体而言,要使具有网络访问权限的本地 SWF 文件编写 Internet 上的 SWF 文件的脚本,被访问的 Internet SWF 文件必须调用 Security.allowDomain("*"),从而反映本地 SWF 文件的来源是未知的。(如果该 Internet SWF 文件是从 HTTPS URL 加载的,则该 Internet SWF 文件必须改为调用 Security.allowInsecureDomain("*"))。

有时您也可能遇到下面这种情况:您从另一个域中加载一个子级 SWF 文件,并想让该子级 SWF 文件编写父级 SWF 文件的脚本,但您不知道该子级 SWF 文件的最终域。例如,当您使用负载平衡重定向或第三方服务器时就可能发生这种情况。

在这种情况下,您可以使用您传递给 Loader.load() 的 URLRequest 对象的 url 属性。例如,如果将子级 SWF 文件加载到父级 SWF 中,则可以访问父级 SWF 的 Loader 对象的 contentLoaderInfo 属性:

Security.allowDomain(loader.contentLoaderInfo.url)

请务必等待,直至子级 SWF 文件开始加载,以便获得 url 属性的正确值。要确定子级 SWF 何时开始加载,请使用 progress 事件。

也可能出现相反的情况:即您可能创建一个子级 SWF 文件,并想要允许其父级编辑该子级 SWF 文件的脚本,但不知道该父级将来自哪个域。在这种情况下,可以访问作为该 SWF 根对象的显示对象的 loaderInfo 属性。在子级 SWF 中,调用 Security.allowDomain( this.root.loaderInfo.loaderURL)。您不必等待父级 SWF 文件加载;加载子级时,父级已加载完毕。

如果正在为 Flash Player 8 或更高版本进行发布,也可以通过调用 Security.allowDomain("*") 处理这些情况。不过,有时这可能是很危险的便捷手段,因为它允许来自任何域的任何其他 SWF 文件访问执行调用的 SWF 文件。通常,使用 _url 属性更安全。

有关安全性的详细信息,请参阅 Flash Player 开发人员中心主题:安全性

ExternalInterface.addCallback()flash.events.Event.COMPLETEflash.display.DisplayObject.parentflash.net.URLRequest.urlallowInsecureDomain()
allowInsecureDomain 允许所标识的域中的 SWF 文件和 HTML 文件访问执行调用的 SWF 文件(使用 HTTPS 协议承载)中的对象和变量。从 AIR 应用程序安全沙箱中的代码调用此方法会导致引发 SecurityError 异常。应用程序安全沙箱以外的内容不能跨脚本访问应用程序安全沙箱中的内容。 SecurityErrorSecurityErrordomains一个或多个字符串或者 URLRequest 对象,它们可命名一些您希望允许从中进行访问的域。可指定特殊域“*”,以允许从所有域进行访问。

为了从使用 Flash 创作工具中“本地播放安全性”设置(“文件”>“发布设置”>“Flash”选项卡)的“只访问网络”发布的本地 SWF 文件访问非本地 SWF 文件,指定“*”是唯一的方法。

注意:通配符值在子域中不起作用。例如,不能在 domains 参数中使用 ~~.foo.com。您可以为跨域策略文件指定带有通配符值的子域(比如在 ~~.foo.com 中),但是不能以同样方式为 allowInsecureDomain() 方法使用通配符值。

让使用 HTTPS 协议承载的 SWF 文件和 HTML 文件访问执行调用的 SWF 文件中的对象和变量。
允许所标识的域中的 SWF 文件和 HTML 文件访问执行调用的 SWF 文件(使用 HTTPS 协议承载)中的对象和变量。

Flash Player 提供 allowInsecureDomain() 以获得最佳的灵活性,但不建议调用此方法。通过 HTTPS 提供文件,可以为您和您的用户提供若干保护措施,而调用 allowInsecureDomain 会削弱这些保护措施之一。

注意:从 AIR 应用程序沙箱中的代码调用此方法会引发 SecurityError 异常。应用程序安全域以外的内容不能直接跨脚本访问应用程序沙箱中的内容。不过,应用程序沙箱以外的内容可以使用沙箱桥与应用程序安全沙箱中的内容进行通信。

此方法与 Security.allowDomain() 的工作方式相同,但是它还允许在使用非 HTTPS 协议加载访问方并使用 HTTPS 加载被访问方的情况下执行操作。在 Flash Player 7 及更高版本中,不允许非 HTTPS 文件编写 HTTPS 文件的脚本。当被访问的 HTTPS SWF 文件使用 allowInsecureDomain() 方法时,该方法可解除此限制。

仅使用 allowInsecureDomain() 启用从非 HTTPS 文件到 HTTPS 文件的脚本编写。如果执行访问的非 HTTPS 文件和被访问的 HTTPS 文件来自同一个域(例如,如果 http://mysite.com 上的 SWF 文件要编写 https://mysite.com 的 SWF 文件的脚本),请使用它启用脚本编写。请不要使用此方法在非 HTTPS 文件之间、HTTPS 文件之间或从 HTTPS 文件到非 HTTPS 文件启用脚本编写。对于那些情况,请改用 allowDomain()

下面的情形说明了在未经仔细考虑的情况下使用 allowInsecureDomain() 时,它将如何削弱安全性。

请注意,下面的信息只是一种可能的情形,旨在通过一个具体的跨脚本编写示例来帮助您了解 allowInsecureDomain()。它没有涉及安全体系结构的所有问题,仅应用于背景信息。Flash Player 开发人员中心包含有关 Flash Player 和安全性的大量信息。有关详细信息,请参阅 Flash Player 开发人员中心主题:安全性

假定您要创建一个电子商务站点,它由两个组件构成:一个是产品目录组件,它不必是安全的,因为它仅包含公共信息;另一个是购物车/结帐组件,它必须是安全的,以保护用户的财务信息和个人信息。假定您考虑从 http://mysite.com/catalog.swf 提供产品目录,从 https://mysite.com/cart.swf 提供购物车。对您站点的一个要求便是:第三方应不能通过利用您安全体系结构中的漏洞盗取用户的信用卡号码。

请设想:“中间方”攻击者在您的服务器和您的用户之间进行干预,试图盗取您的用户在购物车申请表中输入的信用卡号码。中间方是指这样的人员:对于在您的用户和服务器之间通过公共 Internet 传输的网络数据包,他能够进行查看或更改。例如,您的某些用户所使用的不道德的 ISP,或者,在用户工作区的怀有不良企图的管理员,都可能是中间方。这种情况并不罕见。

如果 cart.swf 使用 HTTPS 将信用卡信息传输到服务器,则中间方攻击者无法直接从网络数据包盗取此信息,因为 HTTPS 传输已加密。但是,攻击者可以使用其他技术:在您的 SWF 文件发送到用户时更改其中一个 SWF 文件的内容;将您的 SWF 文件替换为更改后的版本,此版本将用户的信息传输到由攻击者所有的其他服务器。

HTTPS 协议等可阻止此“修改”攻击发生作用,因为除了加密外,HTTPS 传输还是防篡改的。如果中间方攻击者更改数据包,则接收方将检测到更改并丢弃该数据包。因此在这种情况下,攻击者无法更改您的 cart.swf,因为它是通过 HTTPS 传递的。

不过,假设您希望允许 catalog.swf(通过 HTTP 提供)中的按钮将项目添加到 cart.swf(通过 HTTPS 提供)中的购物车,为实现此功能,cart.swf 调用 allowInsecureDomain(),这样 catalog.swf 就可以编写 cart.swf 的脚本。此操作会导致意外的后果:现在攻击者可以在用户最初下载 catalog.swf 时对它进行更改,这是因为 catalog.swf 是使用 HTTP 发送的,无法防止篡改。现在,攻击者更改过的 catalog.swf 可以编写 cart.swf 的脚本,因为 cart.swf 包含对 allowInsecureDomain() 的调用。已更改的 catalog.swf 文件可以使用 ActionScript 访问 cart.swf 中的变量,这样就可以读取用户的信用卡信息和其他敏感数据。然后,已更改的 catalog.swf 可以将此数据发送到攻击者的服务器。

显然,这是您所不愿看到的,但是您仍希望站点上两个 SWF 文件之间可以进行跨脚本编写。要重新设计此假设的电子商务站点,以避免 allowInsecureDomain(),可以采用下面两种可能的方法:

  • 在应用程序中通过 HTTPS 提供所有 SWF 文件。这是目前为止最简单、最可靠的解决方案。在所述方案中,您将通过 HTTPS 提供 catalog.swf 和 cart.swf。当进行文件切换时(例如将 catalog.swf 从 HTTP 切换到 HTTPS 时),您可能发现占用的带宽和服务器 CPU 负载会稍微增大,您的用户可能发现应用程序加载时间稍长。您需要使用实际服务器进行试验,以确定这些影响的严重程度;通常它们分别不会超过 10-20%,而且有时它们根本不存在。通常,可以通过在服务器上使用 HTTPS 加速硬件或软件来改善效果。通过 HTTPS 提供所有协作 SWF 文件的主要好处是:您可以将 HTTPS URL 用作用户浏览器中的主 URL 而不会从浏览器生成任何混合内容的警告。此外,浏览器的挂锁图标将变为可见,为您的用户提供了公共的、受信任的安全性指示器。
  • 使用 HTTPS 到 HTTP 的脚本编写,而不是 HTTP 到 HTTPS 的脚本编写。在所述的方案中,您可以将用户购物车的内容存储在 catalog.swf 中,并让 cart.swf 仅管理结帐流程。在结账时,cart.swf 可以从 catalog.swf 中的 ActionScript 变量中检索购物车内容。对 HTTP 到 HTTPS 的脚本编写的限制是不对称的;虽然无法安全地允许使用通过 HTTP 传送的 catalog.swf 文件编写使用 HTTPS 传送的 cart.swf 文件的脚本,但 HTTPS cart.swf 文件可以编写 HTTP catalog.swf 文件的脚本。此方法比所有 HTTPS 方法都容易受到攻击;您必须谨慎,不要信任通过 HTTP 传递的任何 SWF 文件,因为 HTTP 容易被篡改。例如,当 cart.swf 检索说明购物车内容的 ActionScript 变量时,cart.swf 中的 ActionScript 代码不能信任此变量的值是所需格式的。您必须确认购物车内容不包含可能导致 cart.swf 执行不期望的操作的无效数据。您还必须接受以下风险:中间方可能通过更改 catalog.swf 为 cart.swf 提供有效但不准确的数据(例如,通过在用户的购物车中放入项目)。通常的结帐流程都是通过显示购物车内容和总费用以待用户最终确认,可以在某种程度上缓解此风险,但是此风险仍然存在。

多年来,Web 浏览器一直强制将 HTTPS 文件和非 HTTPS 文件分开,以上所描述的情形正是此限制的一个很好的理由。Flash Player 为您提供了在绝对必须时避开此安全限制的能力,但在这样做之前一定要仔细考虑后果。

有关安全性的详细信息,请参阅 Flash Player 开发人员中心主题:安全性

allowDomain()
loadPolicyFile 在 url 参数指定的位置查找策略文件。urlString要加载的策略文件的 URL 位置。 在 url 参数指定的位置查找策略文件。 url 参数指定的位置查找策略文件。Adobe AIR 和 Flash Player 使用策略文件来确定是否允许应用程序从它们自己的服务器以外的服务器加载数据。请注意,虽然方法名称为 loadPolicyFile(),但是在发出需要策略文件的网络请求之前,实际并不加载此文件。

使用 Security.loadPolicyFile(),Flash Player 或 AIR 可以从任意位置加载策略文件,如下面的示例所示:

Security.loadPolicyFile("http://www.example.com/sub/dir/pf.xml");

这使 Flash Player 或 AIR 尝试从指定的 URL 检索策略文件。由该位置处的策略文件授予的任何权限将适用于该服务器虚拟目录层次结构中的同一级别或更低级别中的所有内容。

例如,如果在上一段代码之后添加下面的代码行,则这些代码行不会引发异常:

import flash.net.~~; var request:URLRequest = new URLRequest("http://www.example.com/sub/dir/vars.txt"); var loader:URLLoader = new URLLoader(); loader.load(request); var loader2:URLLoader = new URLLoader(); var request2:URLRequest = new URLRequest("http://www.example.com/sub/dir/deep/vars2.txt"); loader2.load(request2);

但是,下面的代码则会引发安全性异常:

import flash.net.~~; var request3:URLRequest = new URLRequest("http://www.example.com/elsewhere/vars3.txt"); var loader3:URLLoader = new URLLoader(); loader3.load(request3);

您可以使用 loadPolicyFile() 加载任意数量的策略文件。在考虑需要策略文件的请求时,Flash Player 或 AIR 始终会等待策略文件下载完成后才会拒绝请求。如果由 loadPolicyFile() 指定的任何策略文件都未对请求进行授权,作为最终的后备操作,Flash Player 或 AIR 会查询原始的默认位置。

在检索主策略文件时,Flash Player 会用三秒钟等待服务器响应。如果未接收到响应,则 Flash Player 假定主策略文件不存在。但是,对 loadPolicyFile() 的调用没有默认超时值;Flash Player 假定调用的文件存在,在加载文件之前会一直等待。因此,如果要确保加载主策略文件,请使用 loadPolicyFile() 来显式调用主策略文件。

无法连接到常用的保留端口。有关已阻止的端口的完整列表,请参阅《ActionScript 3.0 开发人员指南》中的“限制网络 API”。

通过将 xmlsocket 协议与特定的端口号一起使用,您可以直接从 XMLSocket 服务器中检索策略文件,如以下示例所示。套接字连接不受上述的保留端口限制。

Security.loadPolicyFile("xmlsocket://foo.com:414");

这会导致 Flash Player 或 AIR 尝试从指定的主机和端口检索策略文件。使用指定的端口建立连接后,Flash Player 或 AIR 将传输 <policy-file-request />,并以 null 字节终止。服务器必须发送一个 null 字节来终止策略文件,并可以随后关闭该连接;如果服务器不关闭该连接,则 Flash Player 或 AIR 在收到终止 null 字节后也会这样做。

可以在包含 SWF 内容的 HTML 页中设置 objectembed 标签的 allowNetworking 参数,从而防止 SWF 文件使用此方法。

有关安全性的详细信息,请参阅 Flash Player 开发人员中心主题:安全性

showSettings 显示 Flash Player 中的“安全设置”面板。panelStringdefault来自 SecurityPanel 类的一个值,它指定您希望显示哪一个“安全设置”面板。如果省略此参数,则使用 SecurityPanel.DEFAULT 显示 Flash Player 中的“安全设置”面板。此方法不适用于 Adobe AIR 中的内容,在 AIR 应用程序中调用此方法不起作用。 SecurityPanelAPPLICATION 此文件正在 AIR 应用程序中运行,它是随该应用程序的包(AIR 文件)一起安装的。applicationString 此文件正在 AIR 应用程序中运行,它是随该应用程序的包(AIR 文件)一起安装的。此内容包括在 AIR 应用程序资源目录中(安装应用程序内容的位置)。 sandboxTypeREMOTELOCAL_WITH_FILELOCAL_WITH_NETWORKLOCAL_TRUSTEDLOCAL_TRUSTED 此文件是本地文件,并且用户已使用 Flash Player 设置管理器或 FlashPlayerTrust 配置文件将其设置为受信任的文件。localTrustedString 此文件是本地文件,并且用户已使用 Flash Player 设置管理器或 FlashPlayerTrust 配置文件将其设置为受信任的文件。此 文件既可以从本地数据源读取数据,也可以与 Internet 进行通信。 sandboxTypeREMOTELOCAL_WITH_FILELOCAL_WITH_NETWORKAPPLICATIONLOCAL_WITH_FILE 此文件是本地文件,尚未受到用户信任,它不是使用网络名称发布的 SWF 文件。localWithFileString 此文件是本地文件,尚未受到用户信任,它不是使用网络名称发布的 SWF 文件。在 Adobe AIR 中,本地文件 放在应用程序资源目录中,这些文件放在应用程序安全沙箱中。此 文件可以从本地数据源读取数据,但不能与 Internet 进行通信。 sandboxTypeREMOTELOCAL_WITH_NETWORKLOCAL_TRUSTEDAPPLICATIONLOCAL_WITH_NETWORK 此文件是本地文件,尚未受到用户信任,它是使用网络名称发布的 SWF 文件。localWithNetworkString 此文件是本地文件,尚未受到用户信任,它是使用网络名称发布的 SWF 文件。此 文件可与 Internet 通信,但不能从本地数据源读取数据。 sandboxTypeREMOTELOCAL_WITH_FILELOCAL_TRUSTEDAPPLICATIONREMOTE 此 文件来自 Internet URL,并在基于域的沙箱规则下运行。remoteString 此 文件来自 Internet URL,并在基于域的沙箱规则下运行。 sandboxTypeLOCAL_WITH_FILELOCAL_WITH_NETWORKLOCAL_TRUSTEDAPPLICATIONexactSettings 确定 Flash Player 或 AIR 如何选择用于某些内容设置的域,包括摄像头和麦克风权限、存储配额及永久共享对象存储的设置。BooleanFlash Player 或 AIR 在决定播放器设置时已至少使用了一次 exactSettings 的值。 SecurityErrorSecurityError 确定 Flash Player 或 AIR 如何选择用于某些内容设置的域,包括摄像头和麦克风权限、存储配额及永久共享对象存储的设置。要让 SWF 文件使用的设置与在 Flash Player 6 中使用的设置相同,可以将 exactSettings 设置为 false

在 Flash Player 6 中,为这些播放器设置使用的域基于 SWF 文件的域的末尾部分。如果 SWF 文件的域包含的段数超过两个,如 www.example.com,则会去除该域的第一段(“www”),并使用该域的剩余部分:example.com。因此,在 Flash Player 6 中,www.example.com 和 store.example.com 都使用 example.com 作为这些设置的域。同样,www.example.co.uk 和 store.example.co.uk 都使用 example.co.uk 作为这些设置的域。在 Flash Player 7 及更高版本中,默认情况下是根据 SWF 文件的精确域来选择播放器设置;例如,来自 www.example.com 的 SWF 文件将使用 www.example.com 的播放器设置,来自 store.example.com 的 SWF 文件将使用 store.example.com 的不同播放器设置。

Security.exactSettings 设置为 true 时,Flash Player 或 AIR 将为播放器设置使用精确域。exactSettings 的默认值是 true。如果将 exactSettings 更改为使用其他值而不是默认值,则应在要求 Flash Player 或 AIR 选择播放器设置的任何事件(例如,使用摄像头或麦克风,或者检索永久共享对象)发生之前执行此操作。

如果您以前发布了第 6 版 SWF 文件并从该文件创建了永久共享对象,并且现在您需要在将该 SWF 文件移植到第 7 版或更高版本后从该 SWF 文件中检索这些永久共享对象,或者从第 7 版或更高版本的其它 SWF 文件中检索这些永久对象,则需要在调用 SharedObject.getLocal() 之前将 Security.exactSettings 设置为 false

pageDomain 获取包含 swf 的网页域。String 获取包含 swf 的网页域。出于安全原因,该方法不返回完整 URL,而只返回页面域,如 http://www.example.com。 sandboxType 表示其中正在运行执行调用的 文件的安全沙箱的类型。String 表示其中正在运行执行调用的 文件的安全沙箱的类型。

Security.sandboxType 具有下列值之一:

  • remote (Security.REMOTE):此文件来自 Internet URL,并在基于域的沙箱规则下运行。
  • localWithFile (Security.LOCAL_WITH_FILE):此文件是本地文件,尚未受到用户信任,且不是使用网络名称进行发布的 SWF 文件。此 文件可以从本地数据源读取数据,但不能与 Internet 进行通信。
  • localWithNetwork (Security.LOCAL_WITH_NETWORK):此 SWF 文件是本地文件,尚未受到用户信任,且已使用网络名称进行发布。此 SWF 文件可与 Internet 通信,但不能从本地数据源读取数据。
  • localTrusted (Security.LOCAL_TRUSTED):此文件是本地文件,并且用户已经使用 Flash Player“设置管理器”或 FlashPlayerTrust 配置文件将其设置为受信任的文件。此 文件既可以从本地数据源读取数据,也可以与 Internet 进行通信。
  • application (Security.APPLICATION):此文件在 AIR 应用程序中运行,并且随该应用程序的包(AIR 文件)一起安装。默认情况下,AIR 应用程序沙箱中的文件可以跨脚本访问任何域中的任何文件(尽管不允许 AIR 应用程序沙箱以外的文件跨脚本访问 AIR 文件)。默认情况下,AIR 应用程序沙箱中的文件可以加载任何域中的内容和数据。

有关安全性的详细信息,请参阅 Flash Player 开发人员中心主题:安全性

REMOTELOCAL_WITH_FILELOCAL_WITH_NETWORKLOCAL_TRUSTEDAPPLICATION
LoaderContext LoaderContext 类提供多种选项,以使用 Loader 类来加载 SWF 文件和其他媒体。Object LoaderContext 类提供多种选项,以使用 Loader 类来加载 SWF 文件和其他媒体。LoaderContext 类用作 Loader 类的 load()loadBytes() 方法的 context 参数。

使用 Loader.load() 方法加载 SWF 文件时,需要做出两个决定:应将所加载的 SWF 文件放置到哪个安全域中,以及应放置到该安全域中的哪个应用程序域中?有关这些选择的更多详细信息,请参阅 applicationDomainsecurityDomain 属性。

使用 Loader.loadBytes() 方法加载 SWF 文件时,与使用 Loader.load() 时一样,也要选择应用程序域,但不必指定安全域,这是因为 Loader.loadBytes() 始终将其加载的 SWF 文件放置到执行加载的 SWF 文件的安全域。

如果是加载图像(JPEG、GIF 或 PNG)而不是 SWF 文件,则无需指定安全域或应用程序域,这是因为这些概念只对 SWF 有意义。此时您只需做出一个决定:是否需要以编程方式访问所加载图像的像素?如果需要,请参阅 checkPolicyFile 属性。如果要在加载图像时应用解块,请使用 JPEGLoaderContext 类替代 LoaderContext 类。

flash.display.Loader.load()flash.display.Loader.loadBytes()flash.system.ApplicationDomainflash.system.JPEGLoaderContextflash.system.LoaderContext.applicationDomainflash.system.LoaderContext.checkPolicyFileflash.system.LoaderContext.securityDomainflash.system.SecurityDomainflash.system.ImageDecodingPolicyLoaderContext 创建带有指定设置的新 LoaderContext 对象。checkPolicyFileBooleanfalse指定在加载对象之前是否应检查有无 URL 策略文件。 applicationDomainflash.system:ApplicationDomainnull指定要用于 Loader 对象的 ApplicationDomain 对象。 securityDomainflash.system:SecurityDomainnull指定要用于 Loader 对象的 SecurityDomain 对象。

注意:AIR 应用程序安全沙箱中的内容无法将其他沙箱中的内容加载到其 SecurityDomain 中。

创建带有指定设置的新 LoaderContext 对象。有关这些设置的完整详细信息,请参阅对该类属性的说明。
flash.display.Loader.load()flash.display.Loader.loadBytes()flash.system.ApplicationDomainflash.system.SecurityDomain
allowCodeImport 指定是否可以使用 Loader 对象将包含可执行代码的内容(例如 SWF 文件)导入到调用方安全沙箱。Boolean 指定是否可以使用 Loader 对象将包含可执行代码的内容(例如 SWF 文件)导入到调用方安全沙箱。有两个导入操作受影响:Loader.loadBytes() 方法和使用 LoaderContext.securityDomain = SecurityDomain.currentDomainLoader.load() 方法。(AIR 应用程序沙箱中不支持后一种操作。)将 allowCodeImport 属性设置为 false 后,这些导入操作仅限安全操作,例如加载图像。使用 Loader.load() 方法加载的正常、非导入 SWF 文件不受此属性的值的影响。

当您要将图像内容导入到沙箱中时,此属性很有用(例如,当您要复制或处理来自不同的域的图像),但在只需要一个图像又不希望承担接收 SWF 文件的安全性风险时,此属性将很有用。由于 SWF 文件可能包含 ActionScript 代码,因此导入 SWF 文件操作比导入图像文件操作的风险大。

在位于应用程序安全沙箱的 AIR 内容中,默认值为 false。在非应用程序内容(包含 Flash Player 中的所有内容)中,默认值为 true

Flash Player 10.1 和 AIR 2.0 中添加了 allowCodeImport 属性。但是,只有 Flash 运行时支持该属性时,SWF 文件和所有版本的 AIR 应用程序才能使用该属性。

flash.display.Loader.loadBytes()flash.display.Loader.load()securityDomain
applicationDomain 指定用于 Loader.load() 或 Loader.loadBytes() 方法的应用程序域。nullflash.system:ApplicationDomain 指定用于 Loader.load()Loader.loadBytes() 方法的应用程序域。只应在加载使用 ActionScript 3.0 编写的 SWF 文件(不是图像或使用 ActionScript 1.0 或 ActionScript 2.0 编写的 SWF 文件)时才使用此属性。

每个安全域被分成一个或多个由 ApplicationDomain 对象表示的应用程序域。应用程序域并不是用于安全目的;它们用于管理 ActionScript 代码的协作单元。如果是从其他域加载 SWF 文件,并允许将它放置到另外一个安全域中,则您将无法控制所加载的 SWF 文件被放置到哪个应用程序域中;即使您指定应选择某个应用程序域,也会忽略。但是,如果是将 SWF 文件加载到您自己的安全域中(因为此 SWF 文件来自您自己的域,或者您正在将它导入到您的安全域中),您就可以控制为所加载的 SWF 文件选择哪个应用程序域。

LoaderContext.applicationDomain 中,您只可以传递您自己的安全域中的应用程序域。如果试图传递任何其他安全域中的应用程序域,则会引发 SecurityError 异常。

有四种 ApplicationDomain 属性可供您选择使用:

  • 加载器的 ApplicationDomain 的子级。默认值。可以使用语法 new ApplicationDomain(ApplicationDomain.currentDomain) 显式表示这种选择。这将允许所加载的 SWF 文件直接使用父级的类,例如,可通过编写 new MyClassDefinedInParent() 来使用。但是父级则不能使用此语法;如果父级要使用子级的类,它必须调用 ApplicationDomain.getDefinition() 来检索它们。这种选择的优点是,如果子级定义的类与父级已经定义的类同名,不会出现错误结果;子级只会继承父级对该类的定义,除非子级或父级调用 ApplicationDomain.getDefinition() 方法来检索子级的冲突定义,否则将不使用此定义。
  • 加载器自己的 ApplicationDomain。使用 ApplicationDomain.currentDomain 时请使用此应用程序域。加载完成后,父级和子级可以直接使用对方的类。如果子级试图定义的类与父级已定义的类同名,则使用父类并忽略子类。
  • 系统 ApplicationDomain 的子级。使用 new ApplicationDomain(null) 时请使用此应用程序域。这将完全分离加载方和被加载方,从而允许它们使用相同的名称定义各自版本的类并且不会产生冲突或隐藏。一方查看另一方的类的唯一方式是调用 ApplicationDomain.getDefinition() 方法。
  • 其他 ApplicationDomain 的子级。有时可能会有更复杂的 ApplicationDomain 层次结构。可以将 SWF 文件从您自己的 SecurityDomain 加载到任何 ApplicationDomain 中。例如,new ApplicationDomain(ApplicationDomain.currentDomain.parentDomain.parentDomain) 将 SWF 文件加载到当前域父级的父级的新子级中。

加载完成后,为调用 ApplicationDomain.getDefinition(),任一方(加载方或被加载方)都可能需要找到它自己的 ApplicationDomain 或另一方的 ApplicationDomain。任一方都可以通过使用 ApplicationDomain.currentDomain 来检索对它自己的应用程序域的引用。执行加载的 SWF 文件可以通过 Loader.contentLoaderInfo.applicationDomain 来检索对被加载的 SWF 文件的 ApplicationDomain 的引用。如果被加载的 SWF 文件知道自己的加载方式,则它可以找到执行加载的 SWF 文件的 ApplicationDomain 对象。例如,如果子级是以默认方式被加载的,则它可以通过使用 ApplicationDomain.currentDomain.parentDomain 找到执行加载的 SWF 文件的应用程序域。

有关详细信息,请参阅《ActionScript 3.0 开发人员指南》中“客户端系统环境”一章的“ApplicationDomain 类”部分。

flash.display.Loader.load()flash.display.Loader.loadBytes()flash.system.ApplicationDomain
checkPolicyFile 指定在开始加载对象本身之前,应用程序是否应该尝试从所加载对象的服务器下载 URL 策略文件。falseBoolean 指定在开始加载对象本身之前,应用程序是否应该尝试从所加载对象的服务器下载 URL 策略文件。此标志适用于 Loader.load() 方法,但不适用于 Loader.loadBytes() 方法。

如果您从执行调用的 SWF 文件所在的域之外加载图像(JPEG、GIF 或 PNG),并且您预计将需要从 ActionScript 访问该图像的内容,请将此标志设置为 true。访问图像内容的示例包括引用 Loader.content 属性以获得 Bitmap 对象,以及调用 BitmapData.draw() 方法以获得所加载图像像素的副本。如果您在加载时没有指定 checkPolicyFile 就尝试执行这些操作之一,您可能会得到一个 SecurityError 异常,这是因为尚未下载所需的策略文件。

LoaderContext.checkPolicyFile 设置为 true 的情况下调用 Loader.load() 方法时,应用程序直到成功下载了相关的 URL 策略文件或发现不存在此类策略文件时才开始下载 URLRequest.url 中的指定对象。Flash Player 或 AIR 首先考虑已经下载的策略文件,然后尝试下载调用 Security.loadPolicyFile() 方法过程中指定的任何待下载策略文件,然后尝试从与 URLRequest.url 对应的默认位置(即 URLRequest.url 所在服务器上的 /crossdomain.xml)下载策略文件。在所有情况下,给定的策略文件必须位于 URLRequest.url(根据策略文件的位置而定),且策略文件必须通过一个或多个 <allow-access-from> 标签允许进行访问。

如果将 checkPolicyFile 设置为 true,则 Loader.load() 方法中指定的主下载将在完全处理该策略文件之后开始下载。因此,只要您需要的策略文件存在,一旦您收到来自 Loader 对象的 contentLoaderInfo 属性的任何 ProgressEvent.PROGRESSEvent.COMPLETE 事件,就说明该策略文件下载已完成,您就可以安全地开始执行需要该策略文件的操作。

如果您将 checkPolicyFile 设置为 true,并且未找到相关的策略文件,则除非您尝试执行的操作引发了 SecurityError 异常,否则您将不会收到任何错误表示。但是,一旦 LoaderInfo 对象调度 ProgressEvent.PROGRESSEvent.COMPLETE 事件,您就可以通过检查 LoaderInfo.childAllowsParent 属性的值来测试是否找到了相关的策略文件。

如果不需要对正在加载的图像进行像素级的访问,则不应将 checkPolicyFile 属性设置为 true。在这种情况下不必再检查是否存在策略文件,因为这样会延迟下载的开始时间,并且可能会不必要地占用网络带宽。

如果是使用 Loader.load() 方法下载 SWF 文件,也尽量不要将 checkPolicyFile 设置为 true。这是因为 SWF 到 SWF 的权限不是由策略文件控制的,而是由 Security.allowDomain() 方法控制的,因此在加载 SWF 文件时 checkPolicyFile 不起任何作用。在这种情况下不必再检查是否存在策略文件,因为这样会延迟 SWF 文件的下载,并且可能会不必要地占用网络带宽 (Flash Player 或 AIR 无法判断主下载将是 SWF 文件还是图像,这是因为策略文件下载先于主下载进行。)

如果是从可能使用服务器端 HTTP 重定向的 URL 下载对象,则使用 checkPolicyFile 时要小心。始终从 URLRequest.url 中指定的相应初始 URL 检索策略文件。如果由于 HTTP 重定向而导致最终对象来自其他 URL,则最初下载的策略文件可能不适用于该对象的最终 URL,而最终 URL 对于安全性决策非常重要。如果发现处于这种情况,可以在收到 ProgressEvent.PROGRESSEvent.COMPLETE 事件后检查 LoaderInfo.url 的值,它会告诉您该对象的最终 URL。接着,用一个基于该对象的最终 URL 的策略文件 URL 调用 Security.loadPolicyFile() 方法。然后轮询 LoaderInfo.childAllowsParent 的值,直到它变为 true

不需要为运行于应用程序沙箱中的 AIR 内容设置此属性。AIR 应用程序沙箱中的内容调用 BitmapData.draw() 方法时可以使用任何已加载的图像内容作为源。

flash.display.BitmapData.draw()flash.display.Loader.contentflash.display.Loader.load()flash.display.LoaderInfo.childAllowsParentflash.display.LoaderInfo.urlflash.system.Security.allowDomain()flash.system.Security.loadPolicyFile()
imageDecodingPolicy 指定是否在使用图像或加载图像时解码图像数据。String 指定是否在使用图像或加载图像时解码图像数据。

在默认策略 ImageDecodingPolicy.ON_DEMAND 下,如果因显示或其他原因需要这些数据,运行时将对图像数据进行解码。此策略保持以前版本运行时所使用的解码行为。

ImageDecodingPolicy.ON_LOAD 策略下,运行时将在图像加载后(调度 complete 事件之前)立即对其进行解码。当多个已加载的图像快速连续显示时(如在滚动列表或封面浏览控制中),加载时解码图像的动画和 UI 性能比需要时解码图像高。另一方面,不加选择的使用 onLoad 策略会使应用程序的内存使用峰值增加,因为与 onDemand 策略相比,此策略可能会同时将更多解码的图像数据保留在内存中。

在两种策略下,运行时在图像解码后均采用相同的缓存和刷新行为。运行时随时可以刷新和解码数据,并在下次需要时重新解码图像。

flash.system.ImageDecodingPolicy
parameters 一个对象,包含要传递至内容的 LoaderInfo 对象的参数。Object 一个对象,包含要传递至内容的 LoaderInfo 对象的参数。

通常,通过分析请求 URL 来获得 contentLoaderInfo.parameters 属性的值。如果设置了 parameters 变量,则 contentLoaderInfo.parameters 从 LoaderContext 对象而不是从请求 URL 中获取其值。与 URL 类似,parameters 变量仅接受包含名称-值字符串对的对象。如果对象不包含名称-值字符串对,则会引发 IllegalOperationError

此 API 的目的是使加载 SWF 文件能够将其参数转发给已加载的 SWF 文件。使用 loadBytes() 方法时,此功能特别有用,这是因为 LoadBytes 不提供通过 URL 传递参数的手段。只能将参数成功转发给其他 AS3 SWF 文件;尽管 AVM1Movie 的 AS3 loaderInfo.parameters 对象将是所转发的对象,AS1 或 AS2 SWF 文件也无法以可访问的形式接收参数。

例如,请考虑以下 URL:

http://yourdomain/users/jdoe/test01/child.swf?foo=bar;

以下代码使用 LoaderContext.parameters 属性复制传递到此 URL 的参数:

      import flash.system.LoaderContext; 
      import flash.display.Loader; 
      var l:Loader = new Loader(); 
      var lc:LoaderContext = new LoaderContext; 
      lc.parameters = { "foo": "bar" }; 
      l.load(new URLRequest("child.swf"), lc);
     

要验证参数是否正确传递,请在运行此代码之后使用以下跟踪语句:

trace(loaderInfo.parameters.foo);

如果内容成功加载,则此跟踪会输出“bar”。

requestedContentParent Loader 尝试向其添加所加载内容的父级。flash.display:DisplayObjectContainer Loader 尝试向其添加所加载内容的父级。

在完全加载内容后,Loader 对象通常成为该内容的父对象。如果设置了 requestedContentParent,则它所指定的对象将成为父对象,除非发生运行时错误使得该分配无法完成。也可以在发生 complete 事件后执行此重定父对象操作,而无须使用此属性。不过,使用 LoaderContext.requestedContentParent 指定父对象可消除额外的事件。

LoaderContext.requestedContentParent 在已加载内容中的第一帧脚本执行之前、构造函数已经运行之后设置所需的父对象。如果 requestedContentParent 为 null(默认值),则 Loader 对象成为内容的父对象。

如果已加载的内容是 AVM1Movie 对象,或者如果在 requestedContentParent 对象上调用 addChild() 时引发错误,则发生下列操作:

  • Loader 对象成为已加载内容的父对象。
  • 运行时调度 AsyncErrorEvent

如果请求的父对象和加载的内容位于不同的安全沙箱中,并且如果请求的父对象无权访问加载的内容,则发生下列操作:

  • Loader 成为已加载内容的父对象。
  • 运行时调度 SecurityErrorEvent

以下代码使用 requestedContentParent 将加载的内容放入 Sprite 对象:

      import flash.system.LoaderContext; 
      import flash.display.Loader; 
      import flash.display.Sprite; 
     
      var lc:LoaderContext = new LoaderContext(); 
      var l:Loader = new Loader(); 
      var s:Sprite = new Sprite(); 
      lc.requestedContentParent = s; 
      addChild(s); 
      l.load(new URLRequest("child.swf"), lc);
     

运行此代码时,舞台上将显示子 SWF 文件。这一事实确认了添加到舞台的 Sprite 对象是加载的 child.swf 文件的父级。

securityDomain 指定用于 Loader.load() 操作的安全域。nullflash.system:SecurityDomain 指定用于 Loader.load() 操作的安全域。只应在加载 SWF 文件(而不是图像)时使用此属性。

只有在被加载的 SWF 文件与执行加载的 SWF 文件可能来自不同的域(不同的服务器)时,选择安全域才有意义。从您自己的域加载 SWF 文件时,始终会将它放置到您的安全域中。但是,在从其他域加载 SWF 文件时,您有两种选择:您可以允许将被加载的 SWF 文件放置到其“自然的”安全域中,此安全域与执行加载的 SWF 文件的安全域不同;这是默认设置。另一种选择是通过将 myLoaderContext.securityDomain 设置为与 SecurityDomain.currentDomain 相同,指出您希望将被加载的 SWF 文件放置到执行加载的 SWF 文件所在的安全域中。这称作导入加载,就安全性而言,它等同于将被加载的 SWF 文件复制到您自己的服务器,然后从该服务器加载它。为使导入加载成功完成,被加载的 SWF 文件的服务器必须具有一个策略文件,并且该策略文件必须信任执行加载的 SWF 文件的域。

您只能在 LoaderContext.securityDomain 中传递您自己的安全域。如果试图传递任何其他安全域,则会引发 SecurityError 异常。

AIR 应用程序安全沙箱中的内容无法将其他沙箱中的内容加载到其 SecurityDomain 中。

有关详细信息,请参阅《ActionScript 3.0 开发人员指南》中的“安全性”一章。

flash.display.Loader.load()flash.system.SecurityDomain
allowLoadBytesCodeExecution 已由 allowCodeImport 替换的旧属性仍支持兼容性。Boolean 已由 allowCodeImport 替换的旧属性仍支持兼容性。之前,唯一受 allowLoadBytesCodeExecution 影响的操作是 Loader.loadBytes() 方法,但是对于 Flash Player 10.1 和 AIR 2.0,使用 LoaderContext.securityDomain = SecurityDomain.currentDomainLoader.load() 的导入加载操作也受影响。(AIR 应用程序沙箱中不支持后一种操作。)此双重效果使属性名称 allowLoadBytesCodeExecution 极其特定,因此现在 allowCodeImport 是首选属性名称。设置 allowCodeImportallowLoadBytesCodeExecution 将影响这两者的值。

指定是否可以使用 Loader 对象将包含可执行代码的内容(例如 SWF 文件)导入到调用方安全沙箱。将此属性设置为 false 后,这些导入操作仅限安全操作,例如加载图像。

在位于应用程序安全沙箱的 AIR 内容中,默认值为 false。在非应用程序内容中,默认值为 true

flash.display.Loader.loadBytes()
JPEGLoaderContext JPEGLoaderContext 类包含一个属性,可以在加载 JPEG 图像时启用消除马赛克的滤镜。flash.system:LoaderContext JPEGLoaderContext 类包含一个属性,可以在加载 JPEG 图像时启用消除马赛克的滤镜。消除马赛克的滤镜通过平滑相邻的像素,改善高压缩率设置下的图像质量。要在加载 JPEG 图像时应用解块,请创建一个 JPEGLoaderContext 对象,并设置其 deblockingFilter 属性。然后使用 JPEGLoaderContext 对象名称作为用于加载图像的 Loader 对象的 load() 方法中 context 参数的值。

JPEGLoaderContext 类扩展了 LoaderContext 类。如果需要以编程方式访问所加载图像的像素(例如,如果要使用 BitmapData.draw() 方法),请将 checkPolicyFile 属性设置为 true。对于在应用程序沙箱中运行的 AIR 内容,无需设置 checkPolicyFile 属性。

flash.display.Loader.load()flash.display.BitmapData.draw()JPEGLoaderContext 以指定的设置创建新的 JPEGLoaderContext 对象。deblockingFilterNumber0.0指定解块滤镜的长度。值为 1.0 时,应用完整长度的消除马赛克的滤镜;值为 0.0 时,禁用消除马赛克的滤镜。 checkPolicyFileBooleanfalse指定 Flash Player 在加载对象前是否应检查有无 URL 策略文件。不应用于正在应用程序沙箱中运行的 AIR 内容。 applicationDomainflash.system:ApplicationDomainnull指定要用于 Loader 对象的 ApplicationDomain 对象。 securityDomainflash.system:SecurityDomainnull指定要用于 Loader 对象的 SecurityDomain 对象。 以指定的设置创建新的 JPEGLoaderContext 对象。 flash.system.LoaderContextflash.display.Loader.load()flash.display.Loader.loadBytes()flash.system.ApplicationDomainflash.system.SecurityDomaindeblockingFilter 指定解块滤镜的长度。0.0Number 指定解块滤镜的长度。值为 1.0 时,应用完整长度的消除马赛克的滤镜;值为 0.0 时,禁用消除马赛克的滤镜。
Capabilities Capabilities 类提供一些属性,这些属性描述了承载应用程序的系统和运行时。Object Capabilities 类提供一些属性,这些属性描述了承载应用程序的系统和运行时。例如,手机屏幕可能有 100 个正方形像素(黑白),而 PC 屏幕可能有 1000 个正方形像素(彩色)。通过使用 Capabilities 类确定客户端具有的功能,您可以向尽可能多的用户提供适当的内容。如果熟悉设备的功能,则可以通知服务器发送合适的 SWF 文件,或是通知 SWF 文件变更其播放方式。

但 Adobe AIR 的有些功能没有作为 Capabilities 类的属性列出。这些功能是其他类的属性:

属性说明NativeApplication.supportsDockIcon操作系统是否支持应用程序文档图标。NativeApplication.supportsMenu操作系统是否支持全局应用程序菜单栏。NativeApplication.supportsSystemTrayIcon操作系统是否支持系统任务栏图标。NativeWindow.supportsMenu操作系统是否支持窗口菜单。NativeWindow.supportsTransparency操作系统是否支持透明窗口。

请勿 使用 Capabilities.osCapabilities.manufacturer 来根据操作系统确定功能。以操作系统来决定功能是个不良习惯,因为如果应用程序没有考虑到所有潜在的目标操作系统,这会产生问题。建议使用与要测试的功能相对应的属性。

可使用 GETPOST HTTP 方法发送功能信息,这些信息作为一个 URL 编码的字符串存储在 Capabilities.serverString 属性中。下例显示了支持 MP3、具有 1600 x 1200 像素分辨率、运行 Windows XP 并且安装有输入法编辑器 (IME) 的计算机的服务器字符串:

A=t&SA=t&SV=t&EV=t&MP3=t&AE=t&VE=t&ACC=f&PR=t&SP=t&
     SB=f&DEB=t&V=WIN%209%2C0%2C0%2C0&M=Adobe%20Windows&
     R=1600x1200&DP=72&COL=color&AR=1.0&OS=Windows%20XP&
     L=en&PT=External&AVD=f&LFD=f&WD=f&IME=t

下表列出了 Capabilities 类的属性和相应的服务器字符串: Capabilities 类属性服务器字符串avHardwareDisableAVDhasAccessibilityACChasAudioAhasAudioEncoderAEhasEmbeddedVideoEVhasIMEIMEhasMP3MP3hasPrintingPRhasScreenBroadcastSBhasScreenPlaybackSPhasStreamingAudioSAhasStreamingVideoSVhasTLSTLShasVideoEncoderVEisDebuggerDEBlanguageLlocalFileReadDisableLFDmanufacturerMmaxLevelIDCMLosOSpixelAspectRatioARplayerTypePTscreenColorCOLscreenDPIDPscreenResolutionXRscreenResolutionYRversionV

还有一个 WD 服务器字符串,用于指定是否禁用无窗口模式。如果与 Web 浏览器不兼容或用户在 mms.cfg 文件中进行了相应设置,则可以在 Flash Player 中禁用无窗口模式。没有对应的 Capabilities 属性。

Capabilities 类的所有属性都是只读的。

下列示例输出在 flash.system.Capabilities 对象中找到的值。首先,此示例将值输出到文本字段中。然后,使用对 trace() 的多个调用输出值。 package { import flash.display.Sprite; import flash.system.Capabilities; import flash.text.TextField; import flash.text.TextFieldAutoSize; public class CapabilitiesExample extends Sprite { public function CapabilitiesExample() { showCapabilities(); } private function showCapabilities():void { var tf:TextField = new TextField(); tf.height = 600; tf.width = 400; tf.autoSize = TextFieldAutoSize.LEFT; tf.wordWrap = true; tf.text = "avHardwareDisable: " + Capabilities.avHardwareDisable + "\nhasAccessibility: " + Capabilities.hasAccessibility + "\nhasAudio: " + Capabilities.hasAudio + "\nhasAudioEncoder: " + Capabilities.hasAudioEncoder + "\nhasEmbeddedVideo: " + Capabilities.hasEmbeddedVideo + "\nhasIME: " + Capabilities.hasIME + "\nhasMP3: " + Capabilities.hasMP3 + "\nhasPrinting: " + Capabilities.hasPrinting + "\nhasScreenBroadcast: " + Capabilities.hasScreenBroadcast + "\nhasScreenPlayback: " + Capabilities.hasScreenPlayback + "\nhasStreamingAudio: " + Capabilities.hasStreamingAudio + "\nhasStreamingVideo: " + Capabilities.hasStreamingVideo + "\nhasTLS: " + Capabilities.hasTLS + "\nhasVideoEncoder: " + Capabilities.hasVideoEncoder + "\nisDebugger: " + Capabilities.isDebugger + "\nisEmbeddedInAcrobat: " + Capabilities.isEmbeddedInAcrobat + "\nlanguage: " + Capabilities.language + "\nlocalFileReadDisable: " + Capabilities.localFileReadDisable + "\nmanufacturer: " + Capabilities.manufacturer + "\nmaxLevelIDC: " + Capabilities.maxLevelIDC + "\nos: " + Capabilities.os + "\npixelAspectRatio: " + Capabilities.pixelAspectRatio + "\nplayerType: " + Capabilities.playerType + "\nscreenColor: " + Capabilities.screenColor + "\nscreenDPI: " + Capabilities.screenDPI + "\nscreenResolutionX: " + Capabilities.screenResolutionX + "\nscreenResolutionY: " + Capabilities.screenResolutionY + "\nserverString: " + Capabilities.serverString + "\ntouchscreenType: " + Capabilities.touchscreenType + // The following capabilities are supported only when publishing for AIR. // If you are publishing for AIR, uncomment the following lines. //"\nlanguages: " + Capabilities.languages + //"\ncpuArchitecture: " + Capabilities.cpuArchitecture + //"\nsupports32BitProcesses: " + Capabilities.supports32BitProcesses + //"\nsupports64BitProcesses: " + Capabilities.supports64BitProcesses + "\nversion: " + Capabilities.version; addChild(tf); trace("avHardwareDisable: " + Capabilities.avHardwareDisable); trace("hasAccessibility: " + Capabilities.hasAccessibility); trace("hasAudio: " + Capabilities.hasAudio); trace("hasAudioEncoder: " + Capabilities.hasAudioEncoder); trace("hasEmbeddedVideo: " + Capabilities.hasEmbeddedVideo); trace("hasIME: " + Capabilities.hasIME); trace("hasMP3: " + Capabilities.hasMP3); trace("hasPrinting: " + Capabilities.hasPrinting); trace("hasScreenBroadcast: " + Capabilities.hasScreenBroadcast); trace("hasScreenPlayback: " + Capabilities.hasScreenPlayback); trace("hasStreamingAudio: " + Capabilities.hasStreamingAudio); trace("hasStreamingVideo: " + Capabilities.hasStreamingVideo); trace("hasTLS: " + Capabilities.hasTLS); trace("hasVideoEncoder: " + Capabilities.hasVideoEncoder); trace("isDebugger: " + Capabilities.isDebugger); trace("isEmbeddedInAcrobat: " + Capabilities.isEmbeddedInAcrobat); trace("language: " + Capabilities.language); trace("localFileReadDisable: " + Capabilities.localFileReadDisable); trace("manufacturer: " + Capabilities.manufacturer); trace("maxLevelIDC: " + Capabilities.maxLevelIDC); trace("os: " + Capabilities.os); trace("pixelAspectRatio: " + Capabilities.pixelAspectRatio); trace("playerType: " + Capabilities.playerType); trace("screenColor: " + Capabilities.screenColor); trace("screenDPI: " + Capabilities.screenDPI); trace("screenResolutionX: " + Capabilities.screenResolutionX); trace("screenResolutionY: " + Capabilities.screenResolutionY); trace("serverString: " + Capabilities.serverString); trace("touchscreenType: " + Capabilities.touchscreenType); // The following capabilities are supported only when publishing for AIR. // If you are publishing for AIR, uncomment the following lines. //trace("cpuArchitecture: " + Capabilities.cpuArchitecture); //trace("languages: " + Capabilities.languages); //trace("supports32BitProcesses: " + Capabilities.supports32BitProcesses); //trace("supports64BitProcesses: " + Capabilities.supports64BitProcesses); trace("version: " + Capabilities.version); } } }
avHardwareDisable 指定对用户的摄像头和麦克风的访问是已经通过管理方式禁止 (true) 还是允许 (false)。Boolean 指定对用户的摄像头和麦克风的访问是已经通过管理方式禁止 (true) 还是允许 (false)。服务器字符串为 AVD

对于 Adobe AIR™ 中的内容,此属性仅适用于应用程序安全沙箱以外的安全沙箱中的内容。应用程序安全沙箱中的内容始终可以访问用户的摄像头和麦克风。

flash.media.Camera.getCamera()flash.media.Microphone.getMicrophone()Security.showSettings()
cpuArchitecture 指定当前 CPU 体系结构。String 指定当前 CPU 体系结构。cpuArchitecture 属性可以返回以下字符串:“PowerPC”、“x86”、“SPARC”和“ARM”。服务器字符串为 ARCHhasAccessibility 指定系统是否支持与辅助功能通信,如果是,则为 true,否则为 false。Boolean 指定系统是否支持与辅助功能通信,如果是,则为 true,否则为 false。服务器字符串为 ACCflash.accessibility.Accessibility.activeflash.accessibility.Accessibility.updateProperties()hasAudioEncoder 指定系统是否可以对音频流(如来自麦克风的音频流)进行编码,如果是,则为 true,否则为 false。Boolean 指定系统是否可以对音频流(如来自麦克风的音频流)进行编码,如果是,则为 true,否则为 false。服务器字符串为 AEhasAudio 指定系统是否有音频功能。Boolean 指定系统是否有音频功能。此属性始终为 true。服务器字符串为 AhasEmbeddedVideo 指定系统是否支持嵌入的视频,如果是,则为 true,否则为 false。Boolean 指定系统是否支持嵌入的视频,如果是,则为 true,否则为 false。服务器字符串为 EVhasIME 指定系统是否安装了输入法编辑器 (IME),如果是,则为 true,否则为 false。Boolean 指定系统是否安装了输入法编辑器 (IME),如果是,则为 true,否则为 false。服务器字符串为 IMEflash.system.IMEflash.system.System.imehasMP3 指定系统是否具有 MP3 解码器,如果是,则为 true,否则为 false。Boolean 指定系统是否具有 MP3 解码器,如果是,则为 true,否则为 false。服务器字符串为 MP3hasPrinting 指定系统是否支持打印,如果是,则为 true,否则为 false。Boolean 指定系统是否支持打印,如果是,则为 true,否则为 false。服务器字符串为 PRhasScreenBroadcast 指定系统是否支持开发通过 Flash Media Server 运行的屏幕广播应用程序,如果是,则为 true,否则为 false。Boolean 指定系统是否支持开发通过 Flash Media Server 运行的屏幕广播应用程序,如果是,则为 true,否则为 false。服务器字符串为 SBhasScreenPlayback 指定系统是否支持播放通过 Flash Media Server 运行的屏幕广播应用程序,如果是,则为 true,否则为 false。Boolean 指定系统是否支持播放通过 Flash Media Server 运行的屏幕广播应用程序,如果是,则为 true,否则为 false。服务器字符串为 SPhasStreamingAudio 指定系统是否可以播放音频流,如果是,则为 true,否则为 false。Boolean 指定系统是否可以播放音频流,如果是,则为 true,否则为 false。服务器字符串为 SAhasStreamingVideo 指定系统是否可以播放视频流,如果是,则为 true,否则为 false。Boolean 指定系统是否可以播放视频流,如果是,则为 true,否则为 false。服务器字符串为 SVhasTLS 指定系统是否通过 NetConnection 支持本机 SSL 套接字,如果是,则为 true,否则为 false。Boolean 指定系统是否通过 NetConnection 支持本机 SSL 套接字,如果是,则为 true,否则为 false。服务器字符串为 TLSflash.net.NetConnection.connectedProxyTypeflash.net.NetConnection.proxyTypeflash.net.NetConnection.usingTLShasVideoEncoder 指定系统是否可以对视频流(如来自 Web 摄像头的视频流)进行编码,如果是,则为 true,否则为 false。Boolean 指定系统是否可以对视频流(如来自 Web 摄像头的视频流)进行编码,如果是,则为 true,否则为 false。服务器字符串为 VEisDebugger 指定系统是特殊的调试版本 (true),还是正式发布的版本 (false)。Boolean 指定系统是特殊的调试版本 (true),还是正式发布的版本 (false)。服务器字符串为 DEB。在 Flash Player 调试版或 AIR Debug Launcher (ADL) 中运行时,此属性设置为 trueisEmbeddedInAcrobat 指定 Flash 运行时是否嵌入用 Acrobat 9.0 或更高版本打开的 PDF 文件中,如果是,则为 true,否则为 false。Boolean 指定 Flash 运行时是否嵌入用 Acrobat 9.0 或更高版本打开的 PDF 文件中,如果是,则为 true,否则为 falselanguages 包含用户的首选用户界面语言相关信息的字符串数组,通过操作系统设置。Array 包含用户的首选用户界面语言相关信息的字符串数组,通过操作系统设置。字符串将包含由 RFC4646 (http://www.ietf.org/rfc/rfc4646.txt) 定义的语言标签(如果适用,还包含字型和区域信息),并使用短划线作为分隔符(例如“en-US”“ja-JP”)。数组中的各语言按照由操作系统设置决定的优先顺序列出。

各种操作系统在区域设置字符串中返回的区域信息有所不同。一个操作系统可能返回“en-us”,而另一个操作系统可能返回“en”

返回数组中的第一个条目的主语言 ID 通常与 Capabilities.language 属性相同。例如,如果 Capabilities.languages[0] 设为“en-US”,则 language 属性将设为“en”。不过,如果 Capabilities.language 属性设为“xu”(指定一个未知语言),则此数组中的第一个元素将与之不同。因此,Capabilities.languages[0] 可能比 Capabilities.language 更准确。

服务器字符串为 LS

language 指定运行内容的系统的语言代码。String 指定运行内容的系统的语言代码。语言指定为 ISO 639-1 中的小写双字母语言代码。对于中文,另外使用 ISO 3166 中的大写双字母国家/地区代码,以区分简体中文和繁体中文。语言代码基于语言的英文名称:例如,hu 指定匈牙利语。

在英文系统上,此属性仅返回语言代码 (en),而不返回国家/地区代码。在 Microsoft Windows 系统上,此属性返回用户界面 (UI) 语言,该语言指的是所有菜单、对话框、错误信息和帮助文件所使用的语言。下表列出了可能的值: 语言捷克语cs丹麦语da荷兰语nl英语en芬兰语fi法语fr德语de匈牙利语hu意大利语it日语ja韩语ko挪威语no其他/未知xu波兰语pl葡萄牙语pt俄语ru简体中文zh-CN西班牙语es瑞典语sv繁体中文zh-TW土耳其语tr

注意:Capabilities.language 属性的值限制为此列表上可能的值。由于此限制,Adobe AIR 应用程序应使用 Capabilities.languages 数组中的第一个元素决定系统的主用户界面语言。

服务器字符串为 L

在下面的示例中,根据用户操作系统的语言显示内容。

Capabilities.language 属性返回 ISO 639-1 语言代码(例如,“en”表示英语)。switch 语句检查语言代码,并将 myTextField 文本字段的内容设置为特定于该语言的问候语。如果示例不支持该语言代码,则返回默认的错误字符串。

package { import flash.display.Sprite; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.system.Capabilities; public class Capabilities_languageExample extends Sprite { public function Capabilities_languageExample() { var myTextField:TextField = new TextField(); myTextField.x = 10; myTextField.y = 10; myTextField.background = true; myTextField.autoSize = TextFieldAutoSize.LEFT; var greetingEnglish:String = "Hello World"; var greetingGerman:String = "Hallo Welt"; var greetingFrench:String = "Bonjour Monde"; var greetingSpanish:String = "Hola Mundo"; var lang:String = Capabilities.language; switch (lang) { case "en": myTextField.text = greetingEnglish; break; case "de": myTextField.text = greetingGerman; break; case "fr": myTextField.text = greetingFrench; break; case "es": myTextField.text = greetingSpanish; break; default: myTextField.text = "Sorry your system's language is not supported at this time."; } this.addChild(myTextField); } } }
languages
localFileReadDisable 指定对用户硬盘的读取权限是已经通过管理方式禁止 (true) 还是允许 (false)。Boolean 指定对用户硬盘的读取权限是已经通过管理方式禁止 (true) 还是允许 (false)。对于 Adobe AIR 中的内容,此属性仅适用于应用程序安全沙箱以外的安全沙箱中的内容。(应用程序安全沙箱中的内容始终可以从文件系统进行读取。)如果此属性设置为 true,则 Flash Player 将无法从用户的硬盘读取文件(包括随同 Flash Player 一同启动的第一个文件)。如果此属性设置为 true,则应用程序安全沙箱以外的 AIR 内容将无法从用户的硬盘读取文件。例如,如果此属性设置为 true,则读取用户硬盘文件的尝试将会失败。

如果此属性设置为 true,则读取运行时共享库也会被阻止,但不管该属性值为何值,都允许读取本地共享的对象。

服务器字符串为 LFD

flash.display.Loader
manufacturer 指定 Flash Player 的运行版本或 AIR 运行时的制造商,其格式为“Adobe OSName”。String 指定 Flash Player 的运行版本或 AIR 运行时的制造商,其格式为“Adobe OSNameOSName 的值可以是“Windows”“Macintosh”“Linux”或其他操作系统名称。服务器字符串为 M

如果存在更具体的功能属性,请勿 使用 Capabilities.manufacturer 来根据操作系统确定功能。以操作系统来决定功能是个不良习惯,因为如果应用程序没有考虑到所有潜在的目标操作系统,这会产生问题。建议使用与要测试的功能相对应的属性。有关详细信息,请参阅 Capabilities 类的描述。

maxLevelIDC 检索客户端硬件支持的最高 H.264 级 IDC。String 检索客户端硬件支持的最高 H.264 级 IDC。以此级别运行的媒体不能保证运行;但是,以最高级别运行的媒体可能无法以最高品质运行。此属性对于尝试以客户端的功能为目标的服务器非常有用。使用此属性,服务器可以确定要发送给客户端的视频的级别。

服务器字符串为 ML

os 指定当前的操作系统。String 指定当前的操作系统。os 属性可以返回下列字符串: 操作系统Windows 7"Windows 7"Windows Vista"Windows Vista"Windows Server 2008 R2"Windows Server 2008 R2"Windows Server 2008"Windows Server 2008"Windows Home Server"Windows Home Server"Windows Server 2003 R2"Windows Server 2003 R2"Windows Server 2003"Windows Server 2003"Windows XP 64"Windows Server XP 64"Windows XP"Windows XP"Windows 98"Windows 98"Windows 95"Windows 95"Windows NT"Windows NT"Windows 2000"Windows 2000"Windows ME"Windows ME"Windows CE"Windows CE"Windows SmartPhone"Windows SmartPhone"Windows PocketPC"Windows PocketPC"Windows CEPC"Windows CEPC"Windows Mobile"Windows Mobile"Mac OS"Mac OS X.Y.Z"(其中 X.Y.Z 为版本号,例如 "Mac OS 10.5.2"Linux"Linux"(Flash Player 连接 Linux 版本,如 "Linux 2.6.15-1.2054_FC5smp"iPhone OS 4.1"iPhone3,1"

服务器字符串为 OS

如果存在更具体的功能属性,请勿 使用 Capabilities.os 来根据操作系统确定功能。以操作系统来决定功能是个不良习惯,因为如果应用程序没有考虑到所有潜在的目标操作系统,这会产生问题。建议使用与要测试的功能相对应的属性。有关详细信息,请参阅 Capabilities 类的描述。

pixelAspectRatio 指定屏幕的像素高宽比。Number 指定屏幕的像素高宽比。服务器字符串为 ARplayerType 指定运行时环境的类型。String 指定运行时环境的类型。此属性可以是下列值之一:
  • "ActiveX",用于 Microsoft Internet Explorer 使用的 Flash Player ActiveX 控件
  • “Desktop”代表 Adobe AIR 运行时(通过 HTML 页加载的 SWF 内容除外,该内容将 Capabilities.playerType 设置为“PlugIn”
  • External”,用于外部 Flash Player 或处于测试模式下
  • “PlugIn”代表 Flash Player 浏览器插件(和通过 AIR 应用程序中的 HTML 页加载的 SWF 内容)
  • "StandAlone",用于独立的 Flash Player

服务器字符串为 PT

screenColor 指定屏幕的颜色。String 指定屏幕的颜色。此属性的值可以是“color”“gray”(代表灰度),或是“bw”(代表黑白)。服务器字符串为 COLscreenDPI 指定屏幕的每英寸点数 (dpi) 分辨率,以像素为单位。Number 指定屏幕的每英寸点数 (dpi) 分辨率,以像素为单位。服务器字符串为 DPscreenResolutionX 指定屏幕的最大水平分辨率。Number 指定屏幕的最大水平分辨率。服务器字符串为 R(它返回屏幕的宽度和高度)。此属性不会随用户的屏幕分辨率而更新,而仅指示 Flash Player 或 Adobe AIR 应用程序启动时的分辨率。另外,此值只指定主屏幕。 screenResolutionY 指定屏幕的最大垂直分辨率。Number 指定屏幕的最大垂直分辨率。服务器字符串为 R(它返回屏幕的宽度和高度)。此属性不会随用户的屏幕分辨率而更新,而仅指示 Flash Player 或 Adobe AIR 应用程序启动时的分辨率。另外,此值只指定主屏幕。 以下示例是一个简单测试,用于指示当前屏幕分辨率和操作系统版本。测试该示例时,单击文本字段可查看属性值: import flash.events.~; import flash.display.~; import flash.system.Capabilities; import flash.text.TextField; var screenInfoTxt:TextField = new TextField(); var screenInfoTxt.x = 30; var screenInfoTxt.y = 50; var screenInfoTxt.width = 300; var screenInfoTxt.height = 100; var screenInfoTxt.border = true; addChild(screenInfoTxt); addEventListener(MouseEvent.CLICK, getScreenNVersion); function getScreenNVersion(e:MouseEvent):void{ screenInfoTxt.text= "flash.system.Capabilities.screenResolutionX is : " + String(flash.system.Capabilities.screenResolutionX) + "\n" + "flash.system.Capabilities.screenResolutionY is : " + String(flash.system.Capabilities.screenResolutionY) + "\n" + "flash.system.Capabilities.version is : " + flash.system.Capabilities.version; } serverString URL 编码的字符串,用于指定每个 Capabilities 属性的值。String URL 编码的字符串,用于指定每个 Capabilities 属性的值。

以下示例显示了一个 URL 编码的字符串:

A=t&SA=t&SV=t&EV=t&MP3=t&AE=t&VE=t&ACC=f&PR=t&SP=t&
	 SB=f&DEB=t&V=WIN%208%2C5%2C0%2C208&M=Adobe%20Windows&
	 R=1600x1200&DP=72&COL=color&AR=1.0&OS=Windows%20XP&
	 L=en&PT=External&AVD=f&LFD=f&WD=f

supports32BitProcesses 指定系统是否支持运行 32 位的进程。Boolean 指定系统是否支持运行 32 位的进程。服务器字符串为 PR32supports64BitProcesses 指定系统是否支持运行 64 位的进程。Boolean 指定系统是否支持运行 64 位的进程。服务器字符串为 PR64touchscreenType 指定支持的触摸屏的类型(如果有)。String 指定支持的触摸屏的类型(如果有)。值是在 flash.system.TouchscreenType 类中定义的。 以下示例是一个简单测试,用于指示触摸屏的当前类型。测试该示例时,单击文本字段可查看属性值: import flash.events.~~; import flash.display.~~; import flash.system.Capabilities; import flash.text.TextField; var capabilitiesTouchScreenTypeTxt:TextField = new TextField(); capabilitiesTouchScreenTypeTxt.width = 300; capabilitiesTouchScreenTypeTxt.border = true; addChild(capabilitiesTouchScreenTypeTxt); addEventListener(MouseEvent.CLICK, getScreenKeyboardType); function getScreenKeyboardType(e:MouseEvent):void{ capabilitiesTouchScreenTypeTxt.text= "flash.system.Capabilities.touchscreenType is : " + flash.system.Capabilities.touchscreenType; } TouchscreenType 类flash.ui.Mouse.supportsCursorversion 指定 Flash Player 或 Adobe&#xAE; AIR&#xAE; 平台和版本信息。String 指定 Flash Player 或 Adobe® AIR® 平台和版本信息。版本号的格式为:平台 (platform),主版本号 (majorVersion),次版本号 (minorVersion)、生成版本号 (buildNumber),内部生成版本号 (internalBuildNumber)platform 可能的值为 “WIN”“MAC”“LNX”“AND”。以下是一些版本信息示例:
	 WIN 9,0,0,0  // Flash Player 9 for Windows
	 MAC 7,0,25,0   // Flash Player 7 for Macintosh
	 LNX 9,0,115,0  // Flash Player 9 for Linux
	 AND 10,2,150,0 // Flash Player 10 for Android
	 

如果存在更具体的功能属性,请勿 使用 Capabilities.version 来根据操作系统确定功能。以操作系统来决定功能是个不良习惯,因为如果应用程序没有考虑到所有潜在的目标操作系统,这会产生问题。建议使用与要测试的功能相对应的属性。有关详细信息,请参阅 Capabilities 类的描述。

服务器字符串为 V

以下示例是一个简单测试,用于指示当前屏幕分辨率和操作系统版本。测试该示例时,单击文本字段可查看属性值: import flash.events.~; import flash.display.~; import flash.system.Capabilities; import flash.text.TextField; var screenInfoTxt:TextField = new TextField(); var screenInfoTxt.x = 30; var screenInfoTxt.y = 50; var screenInfoTxt.width = 300; var screenInfoTxt.height = 100; var screenInfoTxt.border = true; addChild(screenInfoTxt); addEventListener(MouseEvent.CLICK, getScreenNVersion); function getScreenNVersion(e:MouseEvent):void{ screenInfoTxt.text= "flash.system.Capabilities.screenResolutionX is : " + String(flash.system.Capabilities.screenResolutionX) + "\n" + "flash.system.Capabilities.screenResolutionY is : " + String(flash.system.Capabilities.screenResolutionY) + "\n" + "flash.system.Capabilities.version is : " + flash.system.Capabilities.version; }
fscommand 使 SWF 文件能够与 Flash Player 或承载 Flash Player 的程序(如 Web 浏览器)进行通讯。为了响应用户动作(如鼠标事件或按键事件),将不会调用此函数。 ErrorErrorcommandString传递给主机应用程序的用于任何用途的一个字符串,或传递给 Flash Player 的一个命令。 argsString传递给主机应用程序的用于任何用途的一个字符串,或传递给 Flash Player 的一个值。 使 SWF 文件能够与 Flash Player 或承载 Flash Player 的程序(如 Web 浏览器)进行通讯。还可以使用 fscommand() 函数将消息传递给 Director,或是传递给 Visual Basic、Visual C++ 和其他可承载 ActiveX 控件的程序。

fscommand() 函数使 SWF 文件与 Web 页中的脚本能进行通讯。不过,脚本访问是由 Web 页的 allowScriptAccess 设置控制的。(您可以在嵌入 SWF 文件的 HTML 代码中设置此属性,例如,在 Internet Explorer 的 PARAM 标签或 Netscape 的 EMBED 标签中。)

  • allowScriptAccess 设置为 "sameDomain"(默认值)时,只允许从与网页位于同一域中的 SWF 文件进行脚本访问。
  • allowScriptAccess 设置为 "always" 时,SWF 文件可以与其嵌入到的 HTML 页进行通信,即使该 SWF 文件来自不同于 HTML 页的域也可以。
  • allowScriptAccess 设置为 "never" 时,SWF 文件将无法与任何 HTML 页进行通信。请注意,不推荐使用此值,并且在自己的域中并未使用不受信任的 SWF 文件时也没必要使用此值。如果确实需要使用不受信任的 SWF 文件,则 Adobe 建议您创建一个不同的子域,并将所有不受信任的内容置于其中。

可以在包含 SWF 内容的 HTML 页中设置 objectembed 标签的 allowNetworking 参数,防止 SWF 文件使用此方法。

如果执行调用的 SWF 文件位于只能与本地文件系统内容交互的沙箱或只能与远程内容交互的沙箱中,并且包含 SWF 文件的 HTML 页在不受信任的沙箱中,则不允许使用 fscommand() 函数。

有关安全性的详细信息,请参阅 Flash Player 开发人员中心主题:安全性

用法 1:要使用 fscommand() 将消息发送给 Flash Player,必须使用预定义的命令和参数。下表列出了可以为 fscommand() 函数的 command 参数和 args 参数指定的值。这些值控制在 Flash Player 中播放的 SWF 文件,包括放映文件。放映文件 是以可作为独立应用程序运行(也就是说,不需要使用 Flash Player 即可运行)的格式保存的 SWF 文件。

命令参数(参量)目的quit关闭播放器。fullscreentruefalse指定 true 可将 Flash Player 设置为全屏模式。指定 false 可将播放器返回到标准菜单视图。allowscaletruefalse指定 false 可设置播放器始终按 SWF 文件的原始大小绘制 SWF 文件,从不进行缩放。指定 true 会强制将 SWF 文件缩放到播放器的 100% 大小。showmenutruefalse指定 true 可启用整个上下文菜单项集合。指定 false 将隐藏除“关于 Flash Player”和“设置”外的所有上下文菜单项。exec指向应用程序的路径 在放映文件内执行应用程序。trapallkeystruefalse指定 true 可将所有按键事件(包括快捷键)发送到 Flash Player 中的 onClipEvent(keyDown/keyUp) 处理函数。

并非表中所列的全部命令在所有应用程序中都可用:

  • 这些命令在 Web 播放器中都不可用。
  • 在独立放映文件应用程序中,这些命令都可用。
  • 对于类似的函数(例如,NativeApplication.nativeApplication.exit(),而不是 fscommand("quit")),AIR 应用程序应使用 flash.desktop.NativeApplication 类。
  • 只有 allowscaleexec 在测试影片播放器中可用。

exec 命令只能包含字符 A-Z、a-z、0-9、句号 (.) 和下划线 (_)。exec 命令仅在 fscommand 子目录中运行。也就是说,如果您使用 exec 命令调用应用程序,该应用程序必须位于名为 fscommand 的子目录中。exec 命令只在 Flash 放映文件内起作用。

用法 2:要使用 fscommand() 向 Web 浏览器中的脚本语言(例如 JavaScript)发送消息,可以在 commandargs 参数中传递任意两个参数。这些参数可以是字符串或表达式,并在处理或捕获 fscommand() 函数的 JavaScript 函数中使用。

在 Web 浏览器中,fscommand() 调用 JavaScript 函数 moviename_DoFScommand,该函数位于包含 SWF 文件的 Web 页中。对于 moviename,提供您用于 EMBED 标签的 NAME 属性 (attribute) 或 OBJECT 标签的 ID 属性 (property) 的 Flash 对象的名称。如果对 SWF 文件赋予名称“myMovie”,则调用 JavaScript 函数 myMovie_DoFScommand

在包含 SWF 文件的网页中,设置 allowScriptAccess 属性以允许或拒绝 SWF 文件访问网页的能力,如上所述。(您可以在嵌入 SWF 文件的 HTML 代码中设置此属性,例如,在 Internet Explorer 的 PARAM 标签或 Netscape 的 EMBED 标签中。)

在浏览器中运行的 Flash Player 10 和更高版本中,以编程方式使用此方法打开弹出窗口可能不会成功。不同的浏览器(和浏览器配置)可能会随时阻止弹出窗口;不能保证可以显示任何弹出窗口。不过,为了尽可能成功,请仅在作为用户操作的直接结果执行的代码中使用此方法打开弹出窗口,例如,在鼠标单击或按键事件的事件处理函数中。

用法 3:fscommand() 函数可以将消息发送给 Director(Adobe 的 Macromedia Director)。这些消息由 Lingo(Director 脚本语言)解释为字符串、事件或可执行 Lingo 代码。如果消息为字符串或事件,则必须编写 Lingo 代码才能从 fscommand() 函数接收该消息并在 Director 中执行动作。有关详细信息,请参阅 Director 支持中心,网址为 www.adobe.com/support/director/

用法 4:在 VisualBasic、Visual C++ 和可承载 ActiveX 控件的其他程序中,fscommand() 利用可被环境的编程语言进行处理的两个字符串发送 VB 事件。有关详细信息,请使用关键字“Flash 方法”搜索 Flash 支持中心,网址为 www.adobe.com/cn/support/flash/

注意:ExternalInterface 类可为以下通信提供更好的功能:JavaScript 与 ActionScript 之间的通信(用法 2);ActionScript 与 VisualBasic、Visual C++ 或可承载 ActiveX 控件的其他程序之间的通信(用法 4)。应继续使用 fscommand() 将消息发送到 Flash Player(用法 1)和 Director(用法 3)。

下例演示如何使用 fscommand() 来指示 Flash Player 进入全屏模式并且不允许缩放。然后使用 draw() 将一个橙色框添加到舞台上。在 draw() 中,指示 Flash Player 使用对 fscommand(). 的另一个调用来退出,将 click 事件侦听器以名称 clickHandler() 添加进来,它对应于 click 事件。

注意:此示例应在独立的 Flash Player 中执行,而不是在 Web 浏览器中执行。

package { import flash.display.Sprite; import flash.text.TextField; import flash.system.fscommand; import flash.events.MouseEvent; public class FSCommandExample extends Sprite { private var bgColor:uint = 0xFFCC00; private var size:uint = 100; public function FSCommandExample() { fscommand("fullscreen", "true"); fscommand("allowscale", "false"); draw(); } private function clickHandler(event:MouseEvent):void { fscommand("quit"); trace("clickHandler"); } private function draw():void { var child:Sprite = new Sprite(); child.graphics.beginFill(bgColor); child.graphics.drawRect(0, 0, size, size); child.graphics.endFill(); child.buttonMode = true; addEventListener(MouseEvent.CLICK, clickHandler); var label:TextField = new TextField(); label.text = "quit"; label.selectable = false; label.mouseEnabled = false; child.addChild(label); addChild(child); } } }
flash.desktop.NativeApplication
IME 使用 IME 类,您可以在客户端计算机上运行的 Flash 运行时应用程序中直接对操作系统的输入法编辑器 (IME) 进行操作。允许直接操纵操作系统的输入法编辑器 (IME)。 flash.events:EventDispatcher 使用 IME 类,您可以在客户端计算机上运行的 Flash 运行时应用程序中直接对操作系统的输入法编辑器 (IME) 进行操作。可以确定是否安装了 IME、当前是否启用了 IME 以及启用了哪个 IME。您可以在 应用程序中禁用或启用 IME,并且可以执行其他受限制的函数,具体取决于操作系统。

AIR 配置文件支持:桌面操作系统支持此功能,但所有移动设备均不支持此功能。用于电视的 AIR 设备也不支持此功能。您可以使用 IME.isSupported 属性在运行时测试是否受支持。有关在多个配置文件之间支持 API 的详细信息,请参阅 AIR 配置文件支持

利用 IME,用户可键入多字节语言(例如,中文、日语和韩语)的非 ASCII 文本字符。有关使用 IME 的详细信息,请参阅要为其开发应用程序的操作系统的文档。要获取其他资源,请参阅以下网站:

  • http://www.microsoft.com/globaldev/default.mspx
  • http://developer.apple.com/documentation/
  • http://java.sun.com

如果用户计算机上 IME 未处于活动状态,则对 IME 方法或属性(除 Capabilities.hasIME 之外)的调用将会失败。一旦手动激活 IME,随后对 IME 方法和属性的 ActionScript 调用即会正常运行。例如,如果使用日语 IME,则必须在调用任何 IME 方法或属性之前将它激活。

下表显示了此类适用的平台范围:

功能WindowsMac OSXLinux确定是否已安装 IME:Capabilities.hasIME将 IME 设置为启用或禁用状态:IME.enabled查明是启用 IME 还是禁用 IME:IME.enabled获取或设置 IME 转换模式:IME.conversionMode是**向 IME 发送要转换的字符串:IME.setCompositionString()是 ~~在转换之前从 IME 获取原始字符串:System.ime.addEventListener()是 ~~将转换请求发送到 IME:IME.doConversion()是 ~~

* 并非所有 Windows IME 都支持上述全部操作。唯一支持全部操作的 IME 是日语 IME。

** 在 Macintosh 上,只有日语 IME 支持这些方法,第三方 IME 不支持这些方法。

此类的 ActionScript 3.0 版本不支持 Macintosh Classic。

imeComposition 当用户完成输入法编辑器 (IME) 的输入且读取字符串可用时进行调度。flash.events.IMEEvent.IME_COMPOSITIONflash.events.IMEEvent 当用户完成输入法编辑器 (IME) 的输入且读取字符串可用时进行调度。使用 IME 进行输入的文本通常来自使用表意文字而非字母的语言,如日语、中文和韩语。 compositionAbandoned 导致运行时放弃任何正在进行的合成。 导致运行时放弃任何正在进行的合成。当用户单击合成区域外部或当破坏或重置具有焦点的交互式对象时,调用此方法。运行时通过在客户端调用 confirmComposition() 确认合成。运行时还重置 IME 以通知操作系统已放弃合成。 compositionSelectionChanged 在合成内的选区已更新(通过交互方式或编程方式)后调用此方法。startint指定选区开始的偏移(字节数)。 endint指定选区结尾的偏移(字节数)。 在合成内的选区已更新(通过交互方式或编程方式)后调用此方法。 doConversion 表示 IME 为当前复合字符串选择第一个候选项。调用未成功。 ErrorError 表示 IME 为当前复合字符串选择第一个候选项。 setCompositionString 设置 IME 复合字符串。调用未成功。 ErrorErrorcompositionString要发送到 IME 的字符串。 设置 IME 复合字符串。设置了此字符串后,用户就可以在将结果提交到当前具有焦点的文本字段之前选择 IME 候选项。

如果不存在具有焦点的文本字段,则此方法将会失败并引发错误。

conversionMode 当前 IME 的转换模式。String设置尝试未成功。 ErrorError 当前 IME 的转换模式。可能的值为表示转换模式的 IME 模式字符串常量:
  • ALPHANUMERIC_FULL
  • ALPHANUMERIC_HALF
  • CHINESE
  • JAPANESE_HIRAGANA
  • JAPANESE_KATAKANA_FULL
  • JAPANESE_KATAKANA_HALF
  • KOREAN
  • UNKNOWN(只读值;此值不能设置)
flash.system.IMEConversionMode.ALPHANUMERIC_FULLflash.system.IMEConversionMode.ALPHANUMERIC_HALFflash.system.IMEConversionMode.CHINESEflash.system.IMEConversionMode.JAPANESE_HIRAGANAflash.system.IMEConversionMode.JAPANESE_KATAKANA_FULLflash.system.IMEConversionMode.JAPANESE_KATAKANA_HALFflash.system.IMEConversionMode.KOREANflash.system.IMEConversionMode.UNKNOWN
enabled 表示系统 IME 已启用 (true) 还是已禁用 (false)。Boolean设置尝试未成功。 ErrorError 表示系统 IME 已启用 (true) 还是已禁用 (false)。启用的 IME 执行多字节输入;禁用的 IME 执行字母数字输入。 isSupported 如果 IME 类在当前平台上可用,则 isSupported 属性设置为 true,否则,设置为 false。Boolean 如果 IME 类在当前平台上可用,则 isSupported 属性设置为 true,否则,设置为 false
System System 类包含与本地设置和操作相关的属性。Object System 类包含与本地设置和操作相关的属性。其中包含摄像头和麦克风设置,与共享对象相关的操作和剪贴板的使用。

其他属性和方法在 flash.system 包的其他类中:Capabilities 类、IME 类和 Security 类。

此类只包含静态方法和属性。无法创建 System 类的新实例。

下例说明如何通过在对 System.setClipboard() 方法的调用中使用对 System.totalMemory 的调用,将有关系统的总内存的信息复制到系统剪贴板。 package { import flash.display.Sprite; import flash.system.System; public class SystemExample extends Sprite { public function SystemExample() { System.setClipboard("System.totalMemory: " + System.totalMemory); } } }
flash.system.Securityflash.events.IMEEventdisposeXML 使指定的 XML 对象立即可进行垃圾回收。nodeXML应该可使其进行垃圾回收的 XML 引用。 使指定的 XML 对象立即可进行垃圾回收。此方法将删除指定 XML 节点的所有节点之间的父级和子级连接。 exit 关闭 Flash Player。codeuint传递给操作系统的值。通常,如果进程正常退出,则该值为 0。 关闭 Flash Player。

仅适用于独立的 Flash Player 调试版。

AIR 应用程序应调用 NativeApplication.exit() 方法来退出应用程序。

flash.desktop.NativeApplication.exit()
gc 强制执行垃圾回收进程。 强制执行垃圾回收进程。

仅限于 Flash Player 调试版和 AIR 应用程序。在 AIR 应用程序中,System.gc() 方法仅限在运行于 AIR Debug Launcher (ADL) 中的内容或已安装的应用程序的应用程序安全沙箱中的内容中启用。

pause 暂停 Flash Player 或 AIR Debug Launcher (ADL)。 暂停 Flash Player 或 AIR Debug Launcher (ADL)。调用此方法后,除了传送 Socket 事件以外,将停止应用程序中的所有操作。

仅限于 Flash Player 调试版或 AIR Debug Launcher (ADL)。

resume()
resume 调用 System.pause() 后,恢复应用程序。 调用 System.pause() 后,恢复应用程序。

仅限于 Flash Player 调试版或 AIR Debug Launcher (ADL)。

pause()
setClipboard 用指定的文本字符串替换剪贴板的内容。stringString要放置在系统剪贴板上的纯文本字符串,用于替换系统剪贴板上的当前内容(如果有)。 用指定的文本字符串替换剪贴板的内容。 用指定的文本字符串替换剪贴板的内容。当作为用户事件(例如键盘或输入设备事件处理函数)的结果调用此方法时,此方法可以在任何安全性上下文使用。

此方法是为 Flash Player 9 中运行的 SWF 内容提供的。它只允许向剪贴板添加 String 内容。

在 AIR 应用程序中,Flash Player 10 内容和应用程序安全沙箱中的内容可以调用 Clipboard.setData() 方法。

flash.desktop.Clipboard
freeMemory 分配给 Adobe&#xAE; Flash&#xAE; Player 或 Adobe&#xAE; AIR&#xAE; 的内存量以及未使用的内存量(以字节表示)。Number 分配给 Adobe® Flash® Player 或 Adobe® AIR® 的内存量以及未使用的内存量(以字节表示)。当发生垃圾回收时,分配的内存 (System.totalMemory) 的未用部分会变化。使用此属性监视垃圾回收。 privateMemorytotalMemorytotalMemoryNumberime 当前安装的系统 IME。flash.system:IME 当前安装的系统 IME。要为 imeComposition 事件进行注册,请调用此实例上的 addEventListener()IMEConversionModeprivateMemory 应用程序使用的内存总量(以字节表示)。Number 应用程序使用的内存总量(以字节表示)。这是整个进程的常驻专用内存量。

AIR 开发人员应使用此属性确定应用程序的总内存使用量。

对于 Flash Player,这包括容器应用程序(如 Web 浏览器)所使用的内存。

freeMemorytotalMemorytotalMemoryNumber
totalMemoryNumber 当前正使用的由 Flash Player 或 AIR 直接分配的内存量(以字节表示)。Number 当前正使用的由 Flash Player 或 AIR 直接分配的内存量(以字节表示)。

此属性表示为数字,允许使用比 System.totalMemory 属性(其类型为 int)更高的值。

此属性不返回由 Adobe AIR 应用程序或包含 Flash Player 内容的应用程序(如浏览器)使用的所有内存。浏览器或操作系统可能使用其他内存。System.privateMemory 属性反映应用程序所使用的所有内存。

freeMemoryprivateMemorytotalMemory
totalMemory 当前正使用的由 Flash Player 或 AIR 直接分配的内存量(以字节表示)。uint 当前正使用的由 Flash Player 或 AIR 直接分配的内存量(以字节表示)。

此属性不返回由 Adobe AIR 应用程序或包含 Flash Player 内容的应用程序(如浏览器)使用的所有内存。浏览器或操作系统可能使用其他内存。System.privateMemory 属性反映应用程序所使用的所有内存。

如果分配的内存量大于 uint 对象的最大值(uint.MAX_VALUE 或 4,294,967,295),则此属性设置为 0。System.totalMemoryNumber 属性允许使用更大的值。

freeMemoryprivateMemorytotalMemoryNumber
useCodePage 一个布尔值,它决定使用哪个代码页来解释外部文本文件。Boolean 一个布尔值,它决定使用哪个代码页来解释外部文本文件。当此属性设置为 false 时,会将外部文本文件解释为 Unicode。(保存这些文件时,必须使用 Unicode 对其进行编码。)当此属性设置为 true 时,将使用运行该应用程序的操作系统的传统代码页来解释外部文本文件。useCodePage 的默认值是 false

作为外部文件加载(使用 Loader.load()、URLLoader 类或 URLStream)的文本必须已保存为 Unicode 格式,这样应用程序才能将它识别为 Unicode。要使用 Unicode 对外部文件进行编码,请在支持 Unicode 的应用程序(例如,Windows 上的“记事本”)中保存这些文件。

如果加载的外部文本文件不是 Unicode 编码格式,则应将 useCodePage 设置为 true。将以下内容添加为正在加载数据的文件的第一行代码(对于 Flash Professional,将其添加到第一帧):

System.useCodePage = true;

如果存在此代码,则应用程序将使用操作系统的传统代码页来解释外部文本。例如,对于英文 Windows 操作系统,这通常为 CP1252,而对于日语操作系统,这通常为 Shift-JIS。

如果将 useCodePage 设置为 true,则 Flash Player 6 及更高版本处理文本的方式与 Flash Player 5 相同。(Flash Player 5 将所有文本都视为使用运行播放器的操作系统的传统代码页显示文本。)

如果将 useCodePage 设置为 true,则请记住,运行应用程序的操作系统的传统代码页必须包括外部文本文件中使用的字符,这样才能显示文本。例如,如果您加载了一个包含中文字符的外部文本文件,则这些字符不能显示在使用 CP1252 代码页的系统上,因为该代码页不包括中文字符。

为确保所有平台上的用户都能查看您的应用程序中使用的外部文本文件,应将所有外部文本文件按 Unicode 进行编码,并保留 useCodePagefalse 设置。这样,应用程序(Flash Player 6 和更高版本或 AIR)会将文本解释为 Unicode。

flash.display.Loader.load()
SecurityDomain SecurityDomain 类代表当前安全性“沙箱”,也称为“安全域”。Object SecurityDomain 类代表当前安全性“沙箱”,也称为“安全域”。通过将此类的一个实例传递给 Loader.load(),可以请求将所加载的媒体放置到特殊的沙箱中。 currentDomain 获取当前安全域。flash.system:SecurityDomain 获取当前安全域。 flash.display.Loader.load()flash.display.Loader.loadBytes()flash.system.LoaderContextSystemUpdater 通过 SystemUpdater 类,您可以更新 Flash Player 的模块(如 Flash Access 的 DRM 模块)以及 Flash Player 本身。flash.events:EventDispatcher 通过 SystemUpdater 类,您可以更新 Flash Player 的模块(如 Flash Access 的 DRM 模块)以及 Flash Player 本身。SystemUpdaterType 类中列出了可用的模块。

Flash Player 通过调度 NetStatusEvent 事件确定需要进行 Flash Access 模块更新。此事件包含一个其值为 "DRM.UpdateNeeded"code 属性。更新 Flash Access 模块无需经过用户同意。侦听该事件,然后通过调用 update("DRM") 启动更新。

Flash Player 通过使用几种可能的 code 属性值调度 StatusEvent 事件来确定是否需要进行 Player 更新(请参阅 status 事件)。更新 Player 需要经过用户同意。侦听该事件并为用户提供要更新的选项。用户必须同意进行实际更新并通过,例如,单击用户界面中的按钮来启动更新。然后,您可以通过调用 update("SYSTEM") 直接在 ActionScript 中启动 Player 更新。

注意:所有桌面平台上都支持 SystemUpdater API。

flash.system.SystemUpdaterTypecancel 当用户取消对 Player 本身的更新时进行调度。flash.events.Event.CANCELflash.events.Event 当用户取消对 Player 本身的更新时进行调度。仅当请求 SystemUpdaterType.SYSTEM 类型的更新且用户取消更新时调度此事件。 complete 当更新完成时进行调度。flash.events.Event.COMPLETEflash.events.Event 当更新完成时进行调度。 securityError 当遇到安全错误时进行调度。flash.events.SecurityErrorEvent.SECURITY_ERRORflash.events.SecurityErrorEvent 当遇到安全错误时进行调度。例如,如果 Player 在安全策略不允许更新时尝试执行更新,则将出现可导致此事件的安全错误。 ioError 当发生 I/O 错误时进行调度。flash.events.IOErrorEvent.IO_ERRORflash.events.IOErrorEvent 当发生 I/O 错误时进行调度。例如,可导致此事件的一个错误是断开 Internet 连接。 progress 调度以表示下载进度。flash.events.ProgressEvent.PROGRESSflash.events.ProgressEvent 调度以表示下载进度。此事件类似于 Loader 和 URLLoader 类中的 progress 事件。 status 当更新失败时进行调度。flash.events.StatusEvent.STATUSflash.events.StatusEvent 当更新失败时进行调度。更新会由于下列其中一个原因失败:

  • 调用方在不支持的平台或体系结构上运行。在这种情况下,code 属性的值为“DRM.UpdateFailedNotSupported”,level 属性的值为“error”。
  • 请求的更新包不能位于服务器上。在这种情况下,code 属性的值为“DRM.UpdateFailedNotCurrentlyAvailable”,level 属性的值为“error”。
  • 未安装 Flash Access 模块。此错误与由 NetStatusEvent 调度的“DRM.UpdateNeeded”代码类似。然而,在这种情况下,必须先下载 Flash Player 的最新版本。在这种情况下,code 属性的值为“DRM.UpdateNeededButIncompatible”,level 属性的值为“error”。要执行 Flash Player 更新,请调用 SystemUpdater.update(SystemUpdaterType.SYSTEM)
  • 无法下载此新 DRM 模块。在这种情况下,code 属性的值为“DRM.UpdateFailed”,level 属性的值为“error”。

open 当更新开始时进行调度。flash.events.Event.OPENflash.events.Event 当更新开始时进行调度。当发送“complete”事件或者发送 IOErrorEvent、SecurityErrorEvent 或 StatusEvent 后,更新完成。 SystemUpdater 构造函数。 构造函数。 cancel 取消活动的更新。 取消活动的更新。 update 开始指定类型的更新。typeString 开始指定类型的更新。更新类型是在 SystemUpdaterType 类中定义的一个字符串常量。在同一时刻,各浏览器中只允许存在一个进行的更新。

更新开始后,侦听在此类中定义的事件。下列事件表示更新结束并允许进行新的更新或继续尝试进行更新,与调用 update() 函数相同:

  • complete
  • cancel
  • securityError
  • ioError
  • status

flash.system.SystemUpdaterType