【问题标题】:Actionscript3 to JavaScript communication: best practicesActionscript3 到 JavaScript 的通信:最佳实践
【发布时间】:2010-09-23 16:41:36
【问题描述】:

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

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

【问题讨论】:

    标签: javascript actionscript-3 externalinterface


    【解决方案1】:

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

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

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

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

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

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

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

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

    【讨论】:

      【解决方案2】:

      外部接口

      • 您可以从 JS-AS 和 AS-JS 调用中获取返回值
      • 对参数进行编码(使用数组、对象等调用。无需对其进行编码)
      • 跨浏览器
      • 发送 HTML 或 JSON(特殊编码)时有缺陷,它breaks internally

      获取网址

      • 只能调用JS,无法获取返回值,需要对数据进行编码
      • 比弃用更好,在 Flash 10 中它已被删除
      • 确实被移除了,所以不要使用它;)

      fscommand

      • 来吧,ExternalInterface 是解决方案(2008 年)。

      【讨论】:

      • 说得好 - flash 10 中的弃用和随后的删除对我来说很重要。
      【解决方案3】:

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

      【讨论】:

      • 好的 - 我喜欢它,这就是它的用途,VBScript 的东西,单参数的东西,以及作为替代的 navigateToURL - 所以,当你检查 ExternalInterface 的可用性时,你是检查 Flash 端,还是以某种方式检查 javascript 是否存在?
      猜你喜欢
      • 2012-08-28
      • 1970-01-01
      • 1970-01-01
      • 2017-03-18
      • 2015-07-23
      • 2017-04-10
      • 1970-01-01
      • 2011-08-26
      • 2013-11-12
      相关资源
      最近更新 更多