ActionScript:fscommand vs ExternalInterface

时间:2012-07-09 09:04:53

标签: flash actionscript externalinterface fscommand

在ActionScript中,您有两个与主机通信的选项。 (就我而言,使用AxInterop.ShockwaveFlashObjects.dll来承载flash影片的.NET应用程序)

fscommand(String, ...);

ExternalInterface.call(String, ...);

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

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

2 个答案:

答案 0 :(得分:3)

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

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

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

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

答案 1 :(得分:1)

通常,我建议在fscommand上使用ExternalInterface。我认为fscommand或多或少已被弃用。

那就是说,你提到的fscommand是非阻塞的可能是正确的,因为ExternalInterface.call()是同步的,能够从被调用的外部函数返回一个值。我想可能存在情况,边缘情况,这可能会支持fscommand,但你可能不得不测试它。

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