Requisitos y ventajas de la API externa

Flash Player 9 y posterior, Adobe AIR 1.0 y posterior

La API externa es la parte de ActionScript que proporciona un mecanismo de comunicación entre ActionScript y el código que se ejecuta en una "aplicación externa", que actúa a modo de contenedor de Flash Player (normalmente un navegador web o una aplicación de proyector independiente). En ActionScript 3.0, la funcionalidad de la API externa viene dada por la clase ExternalInterface. En las versiones de Flash Player anteriores a Flash Player 8, se usaba la acción fscommand() para llevar a cabo la comunicación con la aplicación contenedora. La clase ExternalInterface es una sustitución de fscommand().

Nota: la antigua función fscommand() aún está disponible como función a nivel de paquete en el paquete flash.system para los casos en los que resulte necesario usarla (por ejemplo para mantener la compatibilidad con aplicaciones anteriores o para interactuar con una aplicación contenedora de SWF de un tercero o con la versión autónoma de Flash Player).

La clase ExternalInterface es un subsistema que permite comunicar fácilmente ActionScript y Flash Player con JavaScript en una página HTML o con cualquier aplicación de escritorio que incluya una instancia de Flash Player.

La clase ExternalInterface sólo está disponible en los siguientes casos:

  • En todas las versiones compatibles de Internet Explorer para Windows (5.0 y versiones posteriores)

  • En una aplicación contenedora, como una aplicación de escritorio que utilice una instancia del control ActiveX de Flash Player

  • En cualquier navegador que admita la interfaz NPRuntime, que actualmente incluye Firefox 1.0 y posterior, Mozilla 1.7.5 y posterior, Netscape 8.0 y posterior y Safari 1.3 y posterior.

En todas las demás situaciones (como al ejecutarse en un reproductor autónomo), la propiedad ExternalInterface.available devuelve el valor false.

Desde ActionScript se puede llamar a una función de JavaScript en la página HTML. La API externa ofrece las siguientes mejoras con respecto a fscommand():

  • Se puede utilizar cualquier función de JavaScript, no sólo que se usan con la función fscommand().

  • Se puede pasar un número arbitrario de argumentos y los argumentos pueden tener el nombre que se desee; no existe la limitación de pasar un comando con un único argumento de tipo cadena. Esto hace que la API externa sea mucho más flexible que fscommand().

  • Se pueden pasar diversos tipos de datos (como Boolean, Number y String); ya no se está limitado a los parámetros de tipo String.

  • Se puede recibir el valor de una llamada y ese valor vuelve inmediatamente a ActionScript (como valor devuelto de la llamada que se realiza).

Importante: si el nombre que se asigna a la instancia de Flash Player en una página HTML (el atributo id de la etiqueta object) incluye un guión (-) u otros caracteres que se definen como operadores en JavaScript (por ejemplo, +, *, /, \, ., etc), las llamadas a ExternalInterface desde ActionScript no funcionarán cuando la página web contenedora se visualice en Internet Explorer. Asimismo, si las etiquetas HTML que definen la instancia de Flash Player (etiquetas object y embed) se anidan en una etiqueta HTML form, las llamadas a ExternalInterface desde ActionScript no funcionarán.