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
Player 版本 : 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 标签中。) 当 allowScriptAccess 设置为 "never" 时,SWF 文件无法访问 Web 页脚本。 对于 Flash Player 7 及更高版本,当 allowScriptAccess 设置为 "always" 时,SWF 文件始终可以访问 Web 页脚本。 当 allowScriptAccess 设置为 "sameDomain" 时,只允许从与该 Web 页位于同一域中的 SWF 文件进行脚本访问;对于以前版本的 Flash Player,始终允许脚本访问。 如果在 HTML 页中未指定 allowScriptAccess,则默认情况下,对于第 8 版及更高版本的 SWF 文件,该属性设置为 "sameDomain";对于第 7 版及更低版本的 SWF 文件,设置为 "always"

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

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

用法 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) 处理函数。

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

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 文件的 Web 页中,设置 allowScriptAccess 属性以允许或拒绝 SWF 文件访问 Web 页的能力。 (您可以在嵌入 SWF 文件的 HTML 代码中设置此属性,例如,在 Internet Explorer 的 PARAM 标签或 Netscape 的 EMBED 标签中。) 当 allowScriptAccess 设置为 "never" 时,外出脚本处理始终失败。 当 allowScriptAccess 设置为 "always" 时,外出脚本处理始终成功。 当它设置为 "sameDomain" 时,只允许从与该 Web 页位于同一域中的 SWF 文件进行脚本访问。 如果未在 Web 页中指定 allowScriptAccess,则对于 Flash Player 8,它默认为 "sameDomain";对于以前的 Flash Player 版本,它默认为 "always"

使用此函数时,请考虑 Flash Player 安全模型。 对于 Flash Player 9,如果执行调用的 SWF 文件在只能与本地文件系统内容交互的沙箱或只能与远程内容交互的沙箱中,并且所包含的 HTML 页在不受信任的沙箱中,则不允许使用 fscommand() 函数。 有关详细信息,请参阅 http://www.adobe.com/go/fp9_0_security_cn 上的《 Flash Player 9 的安全性》白皮书。

用法 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/

注意:如果要针对 Flash Player 8 或更高版本发布,则 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 的一个值。

另请参见


示例
如何使用示例

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

 

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

当前页: http://livedocs.adobe.com/flash/9.0_cn/ActionScriptLangRefV3/flash/system/package.html