fscommand()
,可方便 SWF 文件与其容器之间的通信。函数 | 定义方 | ||
---|---|---|---|
使 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
标签中。)
allowScriptAccess
设置为 "sameDomain"
(默认值)时,只允许从与网页位于同一域中的 SWF 文件进行脚本访问。
allowScriptAccess
设置为 "always"
时,SWF 文件可以与其嵌入到的 HTML 页进行通信,即使该 SWF 文件来自不同于 HTML 页的域也可以。
allowScriptAccess
设置为 "never"
时,SWF 文件将无法与任何 HTML 页进行通信。请注意,不推荐使用此值,并且在自己的域中并未使用不受信任的 SWF 文件时也没必要使用此值。如果确实需要使用不受信任的 SWF 文件,则 Adobe 建议您创建一个不同的子域,并将所有不受信任的内容置于其中。
可以在包含 SWF 内容的 HTML 页中设置 object
和 embed
标签的 allowNetworking
参数,防止 SWF 文件使用此方法。
如果执行调用的 SWF 文件位于只能与本地文件系统内容交互的沙箱或只能与远程内容交互的沙箱中,并且包含 SWF 文件的 HTML 页在不受信任的沙箱中,则不允许使用 fscommand()
函数。
有关与安全性相关的详细信息,请参阅以下部分:
用法 1:若要使用 fscommand()
将消息发送给 Flash Player,必须使用预定义的命令和参数。 下表列出了可以为 fscommand()
函数的 command
参数和 args
参数指定的值。这些值控制在 Flash Player 中播放的 SWF 文件,包括放映文件。放映文件 是以可作为独立应用程序运行(也就是说,不需要使用 Flash Player 即可运行)的格式保存的 SWF 文件。
命令 | 参数(参量) | 目的 |
---|---|---|
quit
| 无 | 关闭播放器。 |
fullscreen
|
true 或 false
|
指定 true 可将 Flash Player 设置为全屏模式。指定 false 可将播放器返回到标准菜单视图。
|
allowscale
|
true 或 false
|
指定 false 可设置播放器始终按 SWF 文件的原始大小绘制 SWF 文件,从不进行缩放。指定 true 会强制将 SWF 文件缩放到播放器的 100% 大小。
|
showmenu
|
true 或 false
|
指定 true 可启用整个上下文菜单项集合。指定 false 将隐藏除“关于 Flash Player”和“设置”外的所有上下文菜单项。
|
exec
| 指向应用程序的路径 | 在放映文件内执行应用程序。 |
trapallkeys
|
true 或 false
|
指定 true 可将所有按键事件(包括快捷键)发送到 Flash Player 中的 onClipEvent(keyDown/keyUp) 处理函数。
|
并非表中所列的全部命令在所有应用程序中都可用:
allowscale
和 exec
在测试影片播放器中可用。
exec
命令只能包含字符 A-Z、a-z、0-9、句号 (.) 和下划线 (_)。exec
命令仅在 fscommand 子目录中运行。也就是说,如果您使用 exec
命令调用应用程序,该应用程序必须位于名为 fscommand 的子目录中。exec
命令只在 Flash 放映文件内起作用。
用法 2:若要使用 fscommand()
向 Web 浏览器中的脚本语言(例如 JavaScript)发送消息,可以在 command
和 args
参数中传递任意两个参数。这些参数可以是字符串或表达式,并在处理或捕获 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); } } }