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 comunicarse fácilmente entre ActionScript y Flash Player y JavaScript en una página HTML.
La clase ExternalInterface solo está disponible en los siguientes casos:
-
En todas las versiones compatibles de Internet Explorer para Windows (5.0 y versiones posteriores)
-
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 una aplicación de AIR cuando se incorpora el SWF en una página HTML visualizada por el control HTMLLoader.
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 solo 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 guion (
-
) 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.