flash llama a funciones JS externas
Método de implementación en cs3:
Para implementar esta función, necesita usar la clase de interfaz externa en as
Se puede encontrar en el documento as p>
Obtener información sobre contenedores externos
La propiedad ExternalInterface.available indica si el Flash Player actual está en un contenedor que proporciona una interfaz externa. Esta propiedad es verdadera si hay una interfaz externa disponible; de lo 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)
{
//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. No informa si JavaScript está actualmente habilitado en el navegador.
Puede determinar el identificador único de una instancia de Flash Player utilizando la propiedad ExternalInterface.objectID (específicamente, el atributo id de la etiqueta de objeto en Internet Explorer o el atributo id en navegadores que utilizan la interfaz NPRuntime). atributo de nombre de la etiqueta incrustada). Este ID único representa el documento SWF actual en el navegador y se puede utilizar para hacer referencia al documento SWF, por ejemplo, al llamar a funciones JavaScript en la página HTML del contenedor. Esta propiedad es nula cuando el contenedor de Flash Player no es un navegador web.
Llamar código externo desde ActionScript
El método ExternalInterface.call() ejecuta código en la aplicación contenedora. Requiere al menos un argumento, que es una cadena que contiene el nombre de la función que se llamará en la aplicación contenedora. Cualquier otro argumento pasado al método ExternalInterface.call() se pasa 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", param1, param2);
Si el contenedor es una página HTML, este método llamará a una función JavaScript con el nombre especificado, que debe definirse en el elemento script de la página HTML que lo contiene. El valor de retorno de la función JavaScript se devuelve a ActionScript.
lt;script language="JavaScript"gt;
// Agrega dos números y envía el resultado de vuelta a ActionScript
función addNumbers(num1, num2)
{
return (num1 num2
}
lt;/scriptgt;
Si el contenedor es otro contenedor ActiveX, 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 (serialado como 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.
Ya sea que el contenedor sea un navegador web u otro contenedor ActiveX, se devolverá nulo siempre que la llamada falle o el método del contenedor no especifique un valor de retorno. El método ExternalInterface.call() genera una excepción SecurityError si el entorno que lo contiene pertenece a un entorno limitado de seguridad al que el código de llamada no tiene acceso. Este problema 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 correspondientes 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 llamarla desde el código del contenedor.
Primero se debe registrar la función ActionScript, indicando que debe estar disponible para el contenedor. Utilice el método ExternalInterface.addCallback() de la siguiente manera:
función callMe(nombre: String): String
{
return "señal de ocupado";< / p>
}
ExternalInterface.addCallback("myFunction", callMe);
El método addCallback() toma dos parámetros. El primer parámetro es un nombre de función de tipo String. El contenedor utilizará este nombre para saber la función que se llamará. El segundo parámetro es la función ActionScript real que se ejecutará cuando el contenedor llame al nombre de la función definida. Dado que estos nombres son distintos, puede especificar el nombre de la función que utilizará el contenedor incluso si la función ActionScript real tiene un nombre diferente. Esto es particularmente útil cuando se desconoce el nombre de la función, por ejemplo: se especifica una función anónima o es necesario determinar la función a llamar en tiempo de ejecución.
Una vez que una función ActionScript se registra con la clase ExternalInterface, el contenedor puede realmente llamar a la función. El método exacto para realizar esta operación depende del tipo de contenedor. Por ejemplo, en el código JavaScript de un navegador web, se llama 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 de un objeto JavaScript que representa un objeto o etiqueta de inserción). Es decir, se pasan parámetros y se devuelven resultados, como si se llamara a una función local.
lt;script language="JavaScript"gt;
// callResult obtiene el valor "señal de ocupado"
var callResult = flashObject.myFunction("my nombre");
lt;/scriptgt;
...
lt; objeto id="flashObject"...gt;
...
lt; embed name="flashObject".../gt;
lt;/objectgt
O, ejecutando Cuando Al llamar a una función ActionScript desde un archivo SWF en una aplicación de escritorio, el nombre de la función registrada y todos los parámetros deben serializarse en una cadena con formato XML. Luego, llame al método CallFunction() del control ActiveX con la 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 del contenedor, directamente como un valor cuando la persona que llama es código JavaScript en el navegador y cuando la persona que llama es un contenedor ActiveX. serializado a cadena de formato XML.