Paquete | flash.external |
Clase | public final class ExternalInterface |
Herencia | ExternalInterface Object |
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Con la clase ExternalInterface, puede llamar a una función de ActionScript en el motor de ejecución de Flash utilizando el JavaScript de la página HTML. La función ActionScript puede devolver un valor y JavaScript lo recibe inmediatamente como el valor devuelto por la llamada.
Esta funcionalidad sustituye al método fscommand()
.
Utilice la clase ExternalInterface en las siguientes combinaciones de navegador y sistema operativo:
Navegador | Sistema operativo | Sistema operativo |
---|---|---|
Internet Explorer 5.0 o posterior | Windows | |
Netscape 8.0 o posterior | Windows | MacOS |
Mozilla 1.7.5 o posterior | Windows | MacOS |
Firefox 1.0 o posterior | Windows | MacOS |
Safari 1.3 o posterior | MacOS |
La versión 9.0.31.0 de Flash Player para Linux y versiones posteriores admiten la clase ExternalInterface en los siguientes navegadores:
Navegador |
---|
Mozilla 1.7.x o posterior |
Firefox 1.5.0.7 o posterior |
SeaMonkey 1.0.5 o posterior |
ExternalInterface requiere que el navegador web del usuario admita ActiveX® o la API NPRuntime que muestran algunos navegadores para la creación de scripts de plug-in. Incluso si no aparece en la lista anterior una combinación de navegador y sistema operativo, debería admitir la clase ExternalInterface si admite la API NPRuntime. Consulte http://www.mozilla.org/projects/plugins/npruntime.html.
Nota: al incorporar archivos SWF en una página HTML, es importante establecer el atributo id
y que los atributos id
y name
de las etiquetas object
y embed
no contengan los siguientes caracteres:
. - + * / \
Nota para aplicaciones de Flash Player: la versión 9.0.115.0 de Flash Player y versiones posteriores admiten .
(punto) en los atributos id
y name
.
Nota para aplicaciones de Flash Player: en Flash Player 10 y versiones posteriores ejecutadas en un navegador, si utiliza esta clase en la programación para abrir una ventana emergente, tal vez no obtenga los resultados deseados. Algunos navegadores (y configuraciones de navegador) bloquean las ventanas emergentes en todo momento; no es posible, por ello, garantizar que aparezcan las ventanas emergentes. No obstante, para intentar garantizar un comportamiento correcto, utilice esta clase para abrir ventanas emergentes únicamente en código que se ejecute como resultado directo de la acción del usuario (por ejemplo, en un controlador de eventos de clics del ratón o de pulsaciones de tecla).
Desde ActionScript, puede realizar las acciones siguientes en la página HTML:
- Llamar a cualquier función JavaScript.
- Transmitir cualquier número de argumentos con cualquier nombre.
- Transmitir varios tipos de datos (Boolean, Number, String, etc.).
- Recibir un valor devuelto de la función JavaScript.
Desde JavaScript en la página HTML, puede realizar lo siguiente:
- Llamar a una función ActionScript.
- Transmitir argumentos con notación de llamada de funciones estándar.
- Devolver un valor a la función JavaScript.
Nota para aplicaciones de Flash Player: actualmente Flash Player no admite archivos SWF incorporados en formularios HTML.
Nota para aplicaciones de AIR: en Adobe AIR, la clase ExternalInterface se puede utilizar para comunicarse entre JavaScript de una página HTML cargada en el control HTMLLoader y ActionScript en contenido SWF incorporado en dicha página HTML.
Más ejemplos
Accessing Flex from JavaScript
About ExternalInterface API security in Flex
Elementos de API relacionados
Propiedad | Definido por | ||
---|---|---|---|
available : Boolean [estática] [solo lectura]
Indica si este reproductor se encuentra en un contenedor que ofrece una interfaz externa. | ExternalInterface | ||
constructor : Object
Una referencia a la clase de objeto o función constructora para una instancia de objeto determinada. | Object | ||
marshallExceptions : Boolean = false [estática]
Indica si la interfaz externa debe intentar transferir excepciones ActionScript al navegador actual y excepciones JavaScript al reproductor. | ExternalInterface | ||
objectID : String [estática] [solo lectura]
Devuelve el atributo id de la etiqueta object en Internet Explorer, o bien el atributo name de la etiqueta embed en Netscape. | ExternalInterface |
Método | Definido por | ||
---|---|---|---|
[estática]
Registra un método de ActionScript como método que puede llamarse desde el contenedor. | ExternalInterface | ||
[estática]
Llama a una función expuesta por el contenedor SWF, transmitiendo cero o más argumentos. | ExternalInterface | ||
Indica si un objeto tiene definida una propiedad especificada. | Object | ||
Indica si hay una instancia de la clase Object en la cadena de prototipo del objeto especificado como parámetro. | Object | ||
Indica si existe la propiedad especificada y si es enumerable. | Object | ||
Establece la disponibilidad de una propiedad dinámica para operaciones de bucle. | Object | ||
Devuelve la representación de cadena de este objeto, con formato según las convenciones específicas de configuración regional. | Object | ||
Devuelve la representación de cadena del objeto especificado. | Object | ||
Devuelve el valor simple del objeto especificado. | Object |
available | propiedad |
available:Boolean
[solo lectura] Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Indica si este reproductor se encuentra en un contenedor que ofrece una interfaz externa. Si la interfaz externa está disponible, esta propiedad es true
; en caso contrario, es false
.
Nota: si utiliza la API externa con HTML, compruebe siempre que el código HTML se ha cargado por completo antes de intentar llamar a cualquier método JavaScript.
Implementación
public static function get available():Boolean
Ejemplo ( Cómo utilizar este ejemplo )
available
para determinar si el reproductor está en un contenedor que ofrece una interfaz externa.
package { import flash.text.TextField; import flash.display.MovieClip; import flash.external.ExternalInterface; public class extint_test extends MovieClip { public function extint_test() { var isAvailable:Boolean = ExternalInterface.available; var availTxt:TextField = new TextField(); availTxt.text = isAvailable.toString(); addChild(availTxt); } } }
marshallExceptions | propiedad |
public static var marshallExceptions:Boolean = false
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 1.0, Flash Player 9.0.115.0, Flash Lite 4 |
Indica si la interfaz externa debe intentar transferir excepciones ActionScript al navegador actual y excepciones JavaScript al reproductor. Debe establecer explícitamente esta propiedad en true
para capturar las excepciones JavaScript en ActionScript y las excepciones ActionScript en JavaScript.
Elementos de API relacionados
Ejemplo ( Cómo utilizar este ejemplo )
addCallback()
. La nueva función emite una excepción para que el código JavaScript que se ejecuta en el navegador pueda capturarla. Este ejemplo también incluye una sentencia try..catch
para capturar excepciones emitidas por el navegador cuando se llama a la función throwit()
.
package { import flash.external.* import flash.net.*; import flash.display.*; import flash.system.System; public class ext_test extends Sprite { function ext_test():void { ExternalInterface.marshallExceptions = true; ExternalInterface.addCallback("g", g); try { ExternalInterface.call("throwit"); } catch(e:Error) { trace(e) } } function g() { throw new Error("exception from actionscript!!!!") } } }
objectID | propiedad |
objectID:String
[solo lectura] Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Devuelve el atributo id
de la etiqueta object
en Internet Explorer, o bien el atributo name
de la etiqueta embed
en Netscape.
Implementación
public static function get objectID():String
addCallback | () | método |
public static function addCallback(functionName:String, closure:Function):void
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Registra un método de ActionScript como método que puede llamarse desde el contenedor. Después de invocar correctamente a addCallBack()
, el código JavaScript o ActiveX del contenedor puede llamar a la función registrada en el reproductor.
Nota: para el contenido local que se ejecute en un navegador, las llamadas al método ExternalInterface.addCallback()
sólo funcionarán si el archivo SWF y la página web que lo contiene están en el entorno limitado de seguridad de confianza local. Para obtener más información, consulte el tema del Centro de desarrollo de Flash Player Seguridad.
Parámetros
functionName:String — Nombre por el que el contenedor puede invocar la función.
| |
closure:Function — Cierre de la función que se va a invocar. Puede ser una función independiente o un cierre del método que haga referencia al método de una instancia de objeto. Al transferir un cierre de método, puede dirigir callback a un método de una instancia de objeto concreta.
Nota: repetir el método |
Emite
Error — El contenedor no admite las llamadas entrantes. Las llamada entrantes sólo se admiten en Internet Explorer para Windows y en navegadores que utilicen la API NPRuntime, por ejemplo, Mozilla 1.7.5 o posterior, o Firefox 1.0 o posterior.
| |
SecurityError — ActionScript ya ha añadido una función callback con el nombre especificado en un entorno limitado al que no tiene acceso; no es posible sobrescribir la función callback. Para solucionar este problema, vuelva a escribir el ActionScript que llamó originalmente al método addCallback() de modo que llame a su vez al método Security.allowDomain() .
| |
SecurityError — El entorno contenedor pertenece a un entorno limitado de seguridad al que no tiene acceso el código que realiza la llamada. Para solucionar este problema, siga estos pasos:
|
Elementos de API relacionados
call | () | método |
public static function call(functionName:String, ... arguments):*
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Llama a una función expuesta por el contenedor SWF, transmitiendo cero o más argumentos. Si la función no está disponible, la llamada devuelve null
; en caso contrario, devuelve el valor suministrado por la función. La recursión no se permite en los navegadores Opera o Netscape; en estos navegadores una llamada recursiva genera una respuesta null
. (La recursión se admite en los navegadores Internet Explorer y Firefox.)
Si el contenedor es una página HTML, este método invoca una función JavaScript en un elemento script
.
Si el contenedor es otro contenedor ActiveX, este método distribuye el evento ActiveX FlashCall con el nombre especificado y el contenedor lo procesa.
Si el contenedor aloja el plug-in de Netscape, puede escribir un soporte personalizado para la nueva interfaz NPRuntime o incorporar un control HTML y el reproductor en el control HTML. Si incorpora un control HTML, puede comunicarse con el reproductor a través de una interfaz de JavaScript en la aplicación contenedora nativa.
Nota: para el contenido local que se ejecute en un navegador, las llamadas al método ExternalInterface.call()
sólo se permiten si el archivo SWF y la página web que lo contiene están en el entorno limitado de seguridad de confianza local. Asimismo, se puede impedir que un archivo SWF utilice este método si define el parámetro allowNetworking
de las etiquetas object
y embed
de la página HTML que aloja el contenido SWF. Para obtener más información, consulte el tema del Centro de desarrollo de Flash Player Seguridad.
Nota para aplicaciones de Flash Player: en la actualización 5 de Flash Player 10 y Flash Player 9, algunos navegadores web limitan la acción de este método si está activado un bloqueador de ventanas emergentes. En este escenario, es posible llamar correctamente a este método sólo como respuesta a un evento de usuario (por ejemplo, en un controlador de eventos de clic de ratón o de pulsación de tecla).
Parámetros
functionName:String — El nombre alfanumérico de la función que se va a llamar en el contenedor. Si utiliza una función no alfanumérica, se producirá un error de tiempo de ejecución (error 2155). Puede utilizar un bloque try..catch para gestionar el error.
| |
... arguments — Argumentos que se pasan a la función en el contenedor. Puede especificar varios parámetros, separados por comas, o no especificar ningún parámetro. Pueden ser cualquier tipo de datos ActionScript. Cuando la llamada se dirige a una función JavaScript, los tipos de ActionScript se convierten automáticamente en tipos JavaScript; cuando la llamada se realiza a algún otro contenedor ActiveX, los parámetros se codifican en el mensaje de petición.
|
* — Respuesta recibida del contenedor. Si falla la llamada; por ejemplo, porque no existe esa función en el contenedor, la interfaz no está disponible, se produce una recursión (con un navegador Netscape u Opera) o hay un problema de seguridad, se devuelve un valor null de problema de seguridad y se emite un error.
|
Emite
Error — El contenedor no admite las llamadas salientes. Las llamada salientes sólo se admiten en Internet Explorer para Windows y en navegadores que utilicen la API NPRuntime, por ejemplo, Mozilla 1.7.5 o posterior, o Firefox 1.0 o posterior.
| |
SecurityError — El entorno contenedor pertenece a un entorno limitado de seguridad al que no tiene acceso el código que realiza la llamada. Para solucionar este problema, siga estos pasos:
|
Ejemplo ( Cómo utilizar este ejemplo )
// // Requires: // - A Flash Professional Label component on the Stage with an instance name of "lbl". // - A Flash Professional Button component on the Stage with an instance name of "button". // var xmlResponse:String = "<invoke name=\"isReady\" returntype=\"xml\"><arguments><number>1</number><number>" + stage.stageWidth + "</number><number>" + stage.stageHeight + "</number></arguments></invoke>"; lbl.text = "ExternalInterface.available: " + ExternalInterface.available; lbl.width = 200; button.enabled = ExternalInterface.available; button.addEventListener(MouseEvent.CLICK, button_click); function button_click(evt:MouseEvent):void { ExternalInterface.call("alert", xmlResponse); }
package { import flash.display.Sprite; import flash.events.*; import flash.external.ExternalInterface; import flash.text.TextField; import flash.utils.Timer; import flash.text.TextFieldType; import flash.text.TextFieldAutoSize; import flash.system.Security; public class ExternalInterfaceExample extends Sprite { private var input:TextField; private var output:TextField; private var sendBtn:Sprite; public function ExternalInterfaceExample() { // constructor code Security.allowDomain("*"); input = new TextField(); input.type = TextFieldType.INPUT; input.background = true; input.border = true; input.width = 350; input.height = 18; addChild(input); sendBtn = new Sprite(); sendBtn.mouseEnabled = true; sendBtn.x = input.width + 10; sendBtn.graphics.beginFill(0xcccccc); sendBtn.graphics.drawRoundRect(0, 0, 80, 18, 10, 10); sendBtn.graphics.endFill(); sendBtn.addEventListener(MouseEvent.CLICK, clickHandler); addChild(sendBtn); output = new TextField(); output.y = 25; output.width = 450; output.height = 325; output.multiline = true; output.wordWrap = true; output.border = true; output.text = "Initializing...\n"; addChild(output); if (ExternalInterface.available) { try { output.appendText("Adding callback...\n"); ExternalInterface.addCallback("sendToActionScript", receivedFromJavaScript); if (checkJavaScriptReady()) { output.appendText("JavaScript is ready.\n"); } else { output.appendText("JavaScript is not ready, creating timer.\n"); var readyTimer:Timer = new Timer(100, 0); readyTimer.addEventListener(TimerEvent.TIMER, timerHandler); readyTimer.start(); } } catch (error:SecurityError) { output.appendText("A SecurityError occurred: " + error.message + "\n"); } catch (error:Error) { output.appendText("An Error occurred: " + error.message + "\n"); } } else { output.appendText("External interface is not available for this container."); } } private function receivedFromJavaScript(value:String):void { output.appendText("JavaScript says: " + value + "\n"); } private function checkJavaScriptReady():Boolean { var isReady:Boolean = ExternalInterface.call("isReady"); return isReady; } private function timerHandler(event:TimerEvent):void { output.appendText("Checking JavaScript status...\n"); var isReady:Boolean = checkJavaScriptReady(); if (isReady) { output.appendText("JavaScript is ready.\n"); output.appendText("ExternalInterface.objectID = " + ExternalInterface.objectID + "\n"); Timer(event.target).stop(); } } private function clickHandler(event:MouseEvent):void { if (ExternalInterface.available) { ExternalInterface.call("sendToJavaScript", input.text); } } } }
<!-- saved from url=(0014)about:internet --> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>ExternalInterfaceExample</title> <script language="JavaScript"> var jsReady = false; function isReady() { return jsReady; } function pageInit() { jsReady = true; document.forms["form1"].output.value += "\n" + "JavaScript is ready.\n"; } function sendToActionScript(value) { document.getElementById("ExternalInterfaceExample").sendToActionScript(value); } function sendToJavaScript(value) { document.forms["form1"].output.value += "ActionScript says: " + value + "\n"; } </script> </head> <body onload="pageInit();"> <object id="ExternalInterfaceExample" name="ExternalInterfaceExample" type="application/x-shockwave-flash" data="ExternalInterfaceExample.swf" width="550" height="400"> <param name="movie" value="ExternalInterfaceExample.swf"/> <param name="quality" value="high"/> <param name="allowscriptaccess" value="always"/> <a href="http://www.adobe.com/go/getflash"> <img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player"/> </a> </object> <form name="form1" onsubmit="return false;"> <input type="text" name="input" value="" /> <input type="button" value="Send" onclick="sendToActionScript(this.form.input.value);" /><br /> <textarea cols="60" rows="20" name="output" readonly="true">Initializing...</textarea> </form> </body> </html>
Tue Jun 12 2018, 02:12 PM Z