Red de conocimiento informático - Aprendizaje de programación - flash llama a funciones JS externas

flash llama a funciones JS externas

Implementado en cs3:

Para hacer esto necesita usar la clase de interfaz externa en as

Se puede encontrar en la documentación de as

Obtener información sobre contenedores externos

La propiedad ExternalInterface.available indica si el reproductor Flash actual está ubicado en un contenedor que proporciona una interfaz externa. Esta propiedad es verdadera si la interfaz externa está disponible; en caso contrario, es falsa. Antes de usar cualquier otra funcionalidad en la clase ExternalInterface, siempre debe verificar que el contenedor actual admita la comunicación de interfaz externa de la siguiente manera:

if (ExternalInterface.available)

{< / p>

// Ejecute la llamada al método ExternalInterface aquí.

}

Nota

La propiedad ExternalInterface.available informa si el contenedor actual es un tipo de contenedor que admite conexiones de interfaz externa.

Al utilizar la propiedad ExternalInterface.objectID, puede determinar el identificador único de la instancia de Flash Player (específicamente, el atributo id de la etiqueta del objeto en Internet Explorer o el nombre de la etiqueta incrustada en los navegadores que utilice la propiedad de interfaz NPRuntime). Este ID único representa el documento SWF actual en el navegador y se puede utilizar para hacer referencia al documento SWF, como cuando se llama a funciones JavaScript en la página HTML del contenedor. Esta propiedad está vacía cuando el contenedor de Flash Player no es un navegador web.

Llamar código externo desde ActionScript

El método ExternalInterface.call() ejecutará el código en la aplicación contenedora. Requiere al menos un argumento, una cadena que contenga el nombre de la función que se llamará en la aplicación contenedora. Cualquier argumento adicional pasado al método ExternalInterface.call() se pasará al contenedor como argumento para la llamada a la función.

// Llama a la función externa "addNumbers"

// Pasa dos parámetros y asigna el resultado de la función

// a la variable "resultado"

var param1: uint = 3;

var param2: uint = 7;

var resultado: uint = ExternalInterface.call("addNumbers", "addNumbers", "addNumbers") parámetros del método. call("addNumbers", param1, param2);

Si el contenedor es una página HTML, este método llamará a la función JavaScript con el nombre especificado, que debe definirse en el elemento script que contiene la página HTML. . El valor de retorno de la función JavaScript se devuelve a ActionScript.

lt;script language="JavaScript"gt;

// Agrega dos números y pasa el resultado a ActionScript

función addNumbers(num1, num2)

{

return (num1 num2);

}

lt;/scriptgt;

Si el contenedor es un contenedor ActiveX diferente, este método hará que el control ActiveX de Flash Player envíe su evento FlashCall. Flash Player serializa el nombre de la función especificada y todos los parámetros en una cadena XML. El contenedor puede acceder a esta información en la propiedad de solicitud del objeto de evento y usarla para determinar cómo ejecutar su propio código. Para devolver un valor a ActionScript, el código contenedor llama al método SetReturnValue() del objeto ActiveX y pasa el resultado serializado a una cadena XML como argumento del método. Para obtener más información sobre el formato XML utilizado para esta comunicación, consulte Formato XML para API externas.

Independientemente de si el contenedor es un navegador web u otro contenedor ActiveX, si la llamada falla o el método del contenedor no especifica un valor de retorno, el método ExternalInterface.call() devolverá un valor nulo si; el entorno del contenedor es inaccesible para el código de llamada. Como parte del entorno limitado de seguridad, el método ExternalInterface.call() generará una excepción SecurityError. Esto se puede resolver estableciendo un valor apropiado para enableScriptAccess en el entorno que lo contiene. Por ejemplo, para cambiar el valor de enableScriptAccess en una página HTML, edite los atributos apropiados en el objeto e incruste etiquetas.

Llamar código ActionScript desde un contenedor

Un contenedor solo puede llamar código ActionScript dentro de una función, no cualquier otro código ActionScript. Para llamar a una función ActionScript desde una aplicación contenedora, debe hacer dos cosas: registrar la función con la clase ExternalInterface y luego llamar a la función desde el código del contenedor.

Primero, se debe registrar la función ActionScript, lo que indica que el contenedor puede utilizar la función. Utilice ExternalInterface.addCallback() de la siguiente manera:

función callMe(nombre: String): String

{

return "señal de ocupado";

}

}

ExternalInterface.addCallback("myFunction", callMe);

El método addCallback() requiere dos parámetros. El primer parámetro es el nombre de una función de tipo cadena, que el contenedor utilizará para saber qué función llamar. El segundo parámetro es la función ActionScript real que ejecutará el contenedor al llamar al nombre de la función definida. Dado que estos nombres son diferentes, puede especificar el nombre de la función que utilizará el contenedor incluso si el nombre real de la función ActionScript es diferente. Esto es especialmente útil cuando se desconoce el nombre de la función, por ejemplo, cuando se especifica una función anónima o es necesario determinar la función a llamar en tiempo de ejecución.

Una vez registrada una función ActionScript en la clase ExternalInterface, el contenedor puede llamar a la función.

El método exacto para lograr esta funcionalidad depende del tipo de contenedor. Por ejemplo, en el código JavaScript de un navegador web, se llamará a una función ActionScript utilizando el nombre de la función registrada como si fuera un método del objeto del navegador Flash Player (es decir, un método del objeto JavaScript que representa el objeto o el marcado incrustado). ). Es decir, se pasarán parámetros y se devolverán resultados, como si se llamara a una función nativa.

lt;script language="JavaScript"gt;

// callResult obtiene el valor "Señal de ocupado"

var callResult = flashObject.myFunction(" Mi nombre");

lt;/scriptgt;

...

lt; objeto id="flashObject"... gt;

...

lt; embed name="flashObject".../gt;

lt;/objectgt

Alternativamente, a Para llamar a una función ActionScript desde un archivo SWF que se ejecuta en una aplicación de escritorio, debe serializar el nombre de la función registrada y todos sus parámetros en una cadena con formato XML. Luego llame al método CallFunction() del control ActiveX con esta cadena XML como parámetro para realizar la llamada. Para obtener más información sobre el formato XML utilizado para esta comunicación, consulte Formato XML para API externas.

En cualquier caso, el valor de retorno de la función ActionScript se devuelve al código contenedor. Cuando la persona que llama es código JavaScript en el navegador, el valor de retorno se devuelve directamente como un valor. Código JavaScript, el valor de retorno se devuelve directamente como un valor de contenedor ActiveX, el valor de retorno se serializará en una cadena de formato XML.