ActionScript:fscommand 与 ExternalInterface

Posted

技术标签:

【中文标题】ActionScript:fscommand 与 ExternalInterface【英文标题】:ActionScript: fscommand vs ExternalInterface 【发布时间】:2012-07-08 16:04:45 【问题描述】:

在 ActionScript 中,您有两个选项可以与主机通信。 (在我的例子中,一个 .NET 应用程序使用 AxInterop.ShockwaveFlashObjects.dll 来托管 Flash 电影)

fscommand(String, ...);

ExternalInterface.call(String, ...);

两者的主要区别是什么?

会不会是 fscommand 在主机端有一点延迟到达? (即它没有阻塞,因此可能与 ExternalInterface 调用混淆?)

【问题讨论】:

【参考方案1】:

ExternalInterfacefscommand 的直接替代品,fscommand 是 Fl​​ash 和容器应用程序之间通信的旧方法(Flash 播放器 8 之前)(请参阅Adobe documentation)。

再次从文档来看,ExternalInterface 相对于fscommand 的优势如下:

您可以使用任何 javascript 函数,而不仅仅是您自己设置的函数 可以与 fscommand() 函数一起使用。 您可以传递任意数量的参数,使用任意名称;你不是 仅限于传递命令和单个字符串参数。这给 外部 API 比 fscommand() 灵活得多。 您可以传递各种数据类型(如布尔值、数字和 细绳);您不再局限于字符串参数。 您可以接收调用的值,然后该值返回 立即发送到 ActionScript(作为调用的返回值)。

如果您的目标是 Flash Player 8 或更高版本,建议您使用 ExternalInterface

【讨论】:

【参考方案2】:

一般来说,我建议使用 ExternalInterface 而不是 fscommand。我认为 fscommand 或多或少已被弃用。

也就是说,你提到的 fscommand 是非阻塞的可能是正确的,因为 ExternalInterface.call() 是同步的,能够从被调用的外部函数返回一个值。我想在某些情况下,边缘情况可能会支持 fscommand,但您可能必须对此进行测试。

再次,我会推荐 ExternalInterface,它有许多 fscommand 没有的功能,例如在 ActionScript 和典型外部环境(网页中的 JavaScript)之间保留数据类型和对象的自动序列化/反序列化 - 而 fscommand 只发送字符串.在 .NET 应用程序中使用 ExternalInterface,我相信您可能必须自己解析 XML-RPC(ExternalInterface 在内部使用),但我不确定。

【讨论】:

以上是关于ActionScript:fscommand 与 ExternalInterface的主要内容,如果未能解决你的问题,请参考以下文章

Actionscript3 到 JavaScript 的通信:最佳实践

ActionScript 3 将FlashVars与ActionScript 3.0一起使用

使用Flash CS4运行外部exe

有关与 .Net 的 ActionScript 套接字通信的帮助

Actionscript 3 - 处理事件是不是与函数分开工作

如果用户没有与动画交互,Actionscript 3 执行一个动作