在比上一个问题更抽象的层面上,根据我的经验,有 3 种方法可以使用 AS3 从嵌入式 .swf 调用 html 页面上的 javascript 函数:ExternalInterface、fscommand 和 navigateToURL。
让我们比较和对比这些方法(也许还有我没有列出的其他方法)并讨论每种方法的优缺点 - 现在,ExternalInterface似乎是灵活性方面的最佳选择,但它适用于所有情况吗?在执行速度或类似方面是否有具体的好处?我很好奇——我们怎么看?
在比上一个问题更抽象的层面上,根据我的经验,有 3 种方法可以使用 AS3 从嵌入式 .swf 调用 html 页面上的 javascript 函数:ExternalInterface、fscommand 和 navigateToURL。
让我们比较和对比这些方法(也许还有我没有列出的其他方法)并讨论每种方法的优缺点 - 现在,ExternalInterface似乎是灵活性方面的最佳选择,但它适用于所有情况吗?在执行速度或类似方面是否有具体的好处?我很好奇——我们怎么看?
ExternalInferface 是为了让 JS 和 Flash 之间的通信更容易而创建的,因此使用其他任何东西都没有任何意义。常见的做法是在调用某些 JS 之前,首先通过评估 ExternalInterface.available 属性的值来检查其是否可用。此属性告诉您要从中调用某些 JS 的 SWF 是否位于提供外部接口的容器内。换句话说,如果使用 ExternalInterface 将起作用。如果它不可用,那么只需使用 flash.net.sendToUrl。切勿使用 fscommand(),因为它使用 VBScript,并且可能会导致与页面上的其他 VBScript 发生冲突。此外,您只能使用 fscommand 发送一个参数字符串,并且必须在 JS 端拆分它。
这完全取决于您是否希望通信是同步的,因为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
.
外部接口
获取网址
fs 命令