外部 API 是 ActionScript 中的一部分,它为在 ActionScript 与充当 Flash Player 容器的“外部应用程序”(通常是 Web 浏览器或独立放映文件应用程序)中所运行的代码之间进行通信提供了一种机制。在 ActionScript 3.0 中,外部 API 的功能是由 ExternalInterface 类提供的。在 Flash Player 8 之前的 Flash Player 版本中,使用 fscommand() 动作与容器应用程序进行通信。ExternalInterface 类替代了 fscommand(),是 JavaScript 与 ActionScript 之间的所有通信的推荐使用机制。
注: 如需使用旧的 fscommand() 函数(例如,为了与较早的应用程序保持兼容或与第三方 SWF 容器应用程序或独立的 Flash Player 进行交互),仍可将其作为 flash.system 包中的包级函数来使用。
ExternalInterface 类是一个子系统,通过它可以轻松地实现从 ActionScript 和 Flash Player 到 HTML 页中的 JavaScript 或任何包含 Flash Player 实例的台式机应用程序的通信。
ExternalInterface 类只在以下情况下可用:
- 在所有受支持的 Internet Explorer for Windows 版本(5.0 和更高版本)中
- 在容器应用程序(例如使用 Flash Player ActiveX 控件实例的台式机应用程序)中
- 在支持 NPRuntime 接口的任何浏览器中(当前包括 Firefox 1.0 和更高版本、Mozilla 1.7.5 和更高版本、Netscape 8.0 和更高版本以及 Safari 1.3 和更高版本)。
在其它所有情况下(例如,在独立的播放器中运行),ExternalInterface.available 属性均返回 false。
从 ActionScript 中,可以在 HTML 页上调用 JavaScript 函数。与 fscommand() 相比,外部 API 可提供以下改进功能:
- 可以使用任何 JavaScript 函数,而不仅仅是可与 fscommand() 函数一起使用的函数。
- 可以传递任意数量的、具有任意名称的参数;而不是仅限于传递一个命令和一个字符串参数。这为外部 API 提供了比 fscommand() 大得多的灵活性。
- 可以传递各种数据类型(例如 Boolean、Number 和 String);不再仅限于 String 参数。
- 可以接收调用值,该值将立即返回到 ActionScript(作为进行的调用的返回值)。
重要说明: 如果为 HTML 页中的 Flash Player 实例指定的名称(object 标签的 id 属性)包含有连字符 (-) 或在 JavaScript 中定义为运算符的其它字符(如 +、*、/、、.,等等),那么在 Internet Explorer 中查看容器网页的时候将无法从 ActionScript 调用 ExternalInterface。此外,如果定义 Flash Player 实例的 HTML 标签(object 和 embed 标签)嵌套在 HTML form标签中,也将无法从 ActionScript 调用 ExternalInterface。