Actionscript3到JavaScript的沟通:最佳实践

时间:2008-11-23 20:01:35

标签: javascript actionscript-3 externalinterface

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

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

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:5)

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

与外部界面相关的实时文档:

  

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

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

从HTML页面上的JavaScript,您可以:

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

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

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

答案 2 :(得分:2)

<强> ExternalInterface的

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

<强>的getURL

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

<强>的fscommand

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