flash.system 包中具有一个包级函数 fscommand(),可方便 SWF 文件与其容器之间的通信。
公共方法
 函数定义方
  
fscommand(command:String, args:String = ""):void
使 SWF 文件能够与 Flash Player 或承载 Flash Player 的程序(如 Web 浏览器)进行通讯。
flash.system
函数详细信息
fscommand()函数
public function fscommand(command:String, args:String = ""):void

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

使 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 标签中。)

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

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

有关与安全性相关的详细信息,请参阅以下部分:

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

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

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

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/support/flash/

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

参数

command:String — 传递给主机应用程序的用于任何用途的一个字符串,或传递给 Flash Player 的一个命令。
 
args:String (default = "") — 传递给主机应用程序的用于任何用途的一个字符串,或传递给 Flash Player 的一个值。


引发
Error — 为了响应用户动作(如鼠标事件或按键事件),将不会调用此函数。

另请参见


示例

下例演示如何使用 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);
        }
    }
}