6

在比上一个问题更抽象的层面,根据我的经验,有 3 种方法可以使用 AS3 从嵌入式 .swf 调用 html 页面上的 javascript 函数:ExternalInterface、fscommand 和 navigateToURL。

让我们比较和对比这些方法(也许还有我没有列出的其他方法)并讨论每种方法的优缺点 - 现在,ExternalInterface似乎是灵活性方面的最佳选择,但它适用于所有情况吗?在执行速度或类似方面是否有具体的好处?我很好奇——我们怎么看?

4

3 回答 3

6

ExternalInferface 是为了让 JS 和 Flash 之间的通信更容易而创建的,因此使用其他任何东西都没有任何意义。常见的做法是在调用某些 JS 之前,首先通过评估 ExternalInterface.available 属性的值来检查其是否可用。此属性告诉您要从中调用某些 JS 的 SWF 是否位于提供外部接口的容器内。换句话说,如果使用 ExternalInterface 将起作用。如果它不可用,那么只需使用 flash.net.sendToUrl。切勿使用 fscommand(),因为它使用 VBScript,并且可能会导致与页面上的其他 VBScript 发生冲突。此外,您只能使用 fscommand 发送一个参数字符串,并且必须在 JS 端拆分它。

于 2008-11-24T04:44:19.340 回答
5

这完全取决于您是否希望通信是同步的,因为ExternaInterface可以像 where 一样返回数据navigatoToURL并且fscommand是异步的,并且只能调用 javascript 函数;他们不能返回值或响应。

来自与外部接口相关的实时文档:

通过 ActionScript,您可以在 HTML 页面上执行以下操作:

  • 调用任何 JavaScript 函数。
  • 传递任意数量的参数,任何名称。
  • 传递各种数据类型(布尔、数字、字符串等)。
  • 从 JavaScript 函数接收返回值。

通过 HTML 页面上的 JavaScript,您可以:

  • 调用 ActionScript 函数。
  • 使用标准函数调用表示法传递参数。
  • 将值返回给 JavaScript 函数。

该类flash.external.ExternalInterface是该类的直接替代品flash.system.fscommand

因此,使用 ExternalInterface 是 flash 和 Javascript 函数之间的首选方法或通信,但如果调用仅仅是异步的,则可以使用flash.net.navigateToURL.

于 2008-11-25T19:20:41.317 回答
2

外部接口

  • 您可以从 JS-AS 和 AS-JS 调用中获取返回值
  • 编码您的参数(使用数组、对象等调用。无需对它们进行编码)
  • 跨浏览器
  • 当您发送 HTML 或 JSON(特殊编码)时存在缺陷,它会在内部中断

获取网址

  • 只能调用JS,得不到返回值,需要对数据进行编码
  • 比弃用更好,在 Flash 10 中它已被删除
  • 它真的被删除了,所以不要使用它;)

fs 命令

  • 来吧,ExternalInterface 是解决方案(2008 年)。
于 2008-12-01T15:25:47.190 回答