3

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

fscommand(String, ...);

ExternalInterface.call(String, ...);

两者的主要区别是什么?

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

4

2 回答 2

3

ExternalInterfacefscommand是Flash 和容器应用程序之间通信的旧方法(Flash 播放器 8 之前)的直接替代品(请参阅Adob​​e 文档)。

再次从文档来看,ExternalInterfaceover的优点fscommand如下:

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

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

于 2012-07-09T12:31:53.080 回答
1

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

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

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

于 2012-07-09T12:42:28.633 回答