在更抽象的层面上a previous question,根据我的经验,有3种方法可以使用AS3从外部.swf调用html页面上的javascript函数:ExternalInterface,fscommand和navigateToURL。
让我们比较和对比这些方法(也许还有我未列出的其他方法)并讨论每种方法的优点和缺点 - 现在,ExternalInterface 似乎就像灵活性方面一样,但它适合所有情况吗?在执行速度方面是否有具体的好处或类似的东西?我很好奇 - 我们怎么想?
答案 0 :(得分:6)
创建ExternalInferface是为了使JS和Flash之间的通信更容易,因此使用其他任何东西都没有意义。通常的做法是在调用某些JS之前通过评估ExternalInterface.available属性的值来检查它是否可用。此属性告诉您是否要在其中调用某些JS的SWF位于提供外部接口的容器内。换句话说,如果使用ExternalInterface将起作用。如果它不可用,那么只需使用flash.net.sendToUrl。永远不要使用fscommand(),因为它使用VBScript并且可能导致与页面上的其他VBScript冲突。此外,您只能使用fscommand发送一个参数字符串,并且必须在JS端将其拆分。
答案 1 :(得分:5)
这完全取决于您是否希望通信是同步的,因为ExternaInterface
可以返回数据,因为navigatoToURL
和fscommand
是异步的,并且只能调用javascript函数;他们无法返回值或回复。
与外部界面相关的实时文档:
在ActionScript中,您可以在HTML页面上执行以下操作:
- 调用任何JavaScript函数。
- 传递任意数量的参数,包括任何名称。
- 传递各种数据类型(布尔值,数字,字符串等)。
- 从JavaScript函数接收返回值。
从HTML页面上的JavaScript,您可以:
- 调用ActionScript函数。
- 使用标准函数调用表示法传递参数。
- 将值返回给JavaScript函数。
flash.external.ExternalInterface
类是flash.system.fscommand
类的直接替代品。
因此,使用ExternalInterface是flash和Javascript函数之间的首选方法或通信,但如果调用只是异步,则可以使用flash.net.navigateToURL
。
答案 2 :(得分:2)
<强> ExternalInterface的强>
<强>的getURL 强>
<强>的fscommand 强>