ActionScript: fscommand vs ExternalInterface



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

fscommand(String, ...);
ExternalInterface.call(String, ...);

两者之间的主要区别是什么?

难道是 fscommand 在主机端有点延迟到达?(即它没有阻塞,因此可能会与外部接口调用混淆?

ExternalInterface

fscommand的直接替代品,是Flash和容器应用程序之间通信的旧方法(Flash Player 8之前((请参阅Adobe文档(。

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

  • 您可以使用任何 JavaScript 函数,而不仅仅是您可以与 fscommand(( 函数一起使用。
  • 你可以传递任意数量的参数,使用任何名称;你不是仅限于传递命令和单个字符串参数。这给了外部 API 比 fscommand(( 更灵活。
  • 您可以传递各种数据类型(如布尔值、数字和字符串(;您不再局限于字符串参数。
  • 您可以接收调用的值,该值返回立即转到 ActionScript(作为您进行的调用的返回值(。

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

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

也就是说,你提到的fscommand是非阻塞的可能是正确的,因为ExternalInterface.call((是同步的,能够从调用的外部函数返回一个值。我想可能存在一些情况,边缘情况,这可能有利于 fscommand,但你可能必须测试一下。

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

最新更新