Paqueteflash.external
Clasepublic final class ExternalInterface
HerenciaExternalInterface Inheritance Object

Versión del lenguaje: ActionScript 3.0
Versión del reproductor: Flash Player 9

La clase ExternalInterface es la API externa, una nueva interfaz de programación de aplicaciones que permite la comunicación directa entre ActionScript y el contenedor de Flash Player; por ejemplo, una página HTML con JavaScript. Adobe recomienda el uso de ExternalInterface en todas las comunicaciones entre JavaScript y ActionScript.

Puede llamar a una función ActionScript en Flash Player utilizando JavaScript en 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:

NavegadorSistema operativoSistema 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 que los atributos id y name de las etiquetas object y embed no contengan los siguientes caracteres:

. - + * / \
 

Desde ActionScript, puede realizar las acciones siguientes en la página HTML:

Desde JavaScript en la página HTML, puede realizar lo siguiente:

Flash Player no admite archivos SWF incorporados en formularios HTML.

Ver los ejemplos

Véase también

flash.system.fscommand()
Requisitos y ventajas de la API externa
Utilización de la clase ExternalInterface


Propiedades públicas
 PropiedadDefinido por
  available : Boolean
[static] [read-only] Indica si este reproductor se encuentra en un contenedor que ofrece una interfaz externa.
ExternalInterface
 Inheritedconstructor : Object
Una referencia a la clase de objeto o función constructora para una instancia de objeto determinada.
Object
  marshallExceptions : Boolean = false
[static] Indica si la interfaz externa debe intentar transferir excepciones ActionScript al navegador actual y excepciones JavaScript a Flash Player.
ExternalInterface
  objectID : String
[static] [read-only] Devuelve el atributo id de la etiqueta object en Internet Explorer, o bien el atributo name de la etiqueta embed en Netscape.
ExternalInterface
 Inheritedprototype : Object
[static] Una referencia al objeto prototipo de una clase u objeto de función.
Object
Métodos públicos
 MétodoDefinido por
  
addCallback(functionName:String, closure:Function):void
[static] Registra un método de ActionScript como método que puede llamarse desde el contenedor.
ExternalInterface
  
call(functionName:String, ... arguments):*
[static] Llama a una función expuesta por el contenedor de Flash Player, transmitiendo cero o más argumentos.
ExternalInterface
 Inherited
Indica si un objeto tiene definida una propiedad especificada.
Object
 Inherited
Indica si hay una instancia de la clase Object en la cadena de prototipo del objeto especificado como parámetro.
Object
 Inherited
Indica si existe la propiedad especificada y si es enumerable.
Object
 Inherited
Establece la disponibilidad de una propiedad dinámica para operaciones de bucle.
Object
 Inherited
Devuelve la representación de cadena del objeto especificado.
Object
 Inherited
Devuelve el valor simple del objeto especificado.
Object
Información sobre propiedades
availablepropiedad
available:Boolean  [read-only]

Versión del lenguaje: ActionScript 3.0
Versión del reproductor: Flash Player 9

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

Véase también


Ejemplo
En el ejemplo siguiente se utiliza la propiedad 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);
      }
    }
  }
  
marshallExceptionspropiedad 
public static var marshallExceptions:Boolean = false

Versión del lenguaje: ActionScript 3.0

Indica si la interfaz externa debe intentar transferir excepciones ActionScript al navegador actual y excepciones JavaScript a Flash Player. Debe establecer explícitamente esta propiedad en true para capturar las excepciones JavaScript en ActionScript y las excepciones ActionScript en JavaScript.

Versión del reproductor: Flash Player 9 Update 3.

Véase también


Ejemplo

El ejemplo siguiente crea una función ActionScript y la registra con el navegador contenedor utilizando el método 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!!!!") }
    }
}
objectIDpropiedad 
objectID:String  [read-only]

Versión del lenguaje: ActionScript 3.0
Versión del reproductor: Flash Player 9

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

Véase también

Información sobre métodos
addCallback()método
public static function addCallback(functionName:String, closure:Function):void

Versión del lenguaje: ActionScript 3.0
Versión del reproductor: Flash Player 9

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 Flash Player.

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 más información, consulte las siguientes secciones:

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.


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:
  1. En la etiqueta object del archivo SWF de la página HTML que lo contiene, establezca el siguiente parámetro:

    <param name="allowScriptAccess" value="always" />

  2. En el archivo SWF, añada el siguiente código ActionScript:

    flash.system.Security.allowDomain( sourceDomain )

Véase también

call()método 
public static function call(functionName:String, ... arguments):*

Versión del lenguaje: ActionScript 3.0
Versión del reproductor: Flash Player 9

Llama a una función expuesta por el contenedor de Flash Player, 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 Flash Player en el control HTML. Si incorpora un control HTML, puede comunicarse con Flash Player 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 más información, consulte las siguientes secciones:

Parámetros

functionName:String — El nombre alfanumérico de la función que se va a llamar en el contenedor.
 
... 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 solicitud.

Valor devuelto
* — 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:
  1. En la etiqueta object del archivo SWF de la página HTML que lo contiene, establezca el siguiente parámetro:

    <param name="allowScriptAccess" value="always" />

  2. En el archivo SWF, añada el siguiente código ActionScript:

    flash.system.Security.allowDomain( sourceDomain )

Véase también

Ejemplos Cómo utilizar los ejemplos
ExternalInterfaceExample.as

En el ejemplo siguiente, se muestra el envío de datos entre Flash Player y un contenedor HTML.

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;

    public class ExternalInterfaceExample extends Sprite {
        private var input:TextField;
        private var output:TextField;
        private var sendBtn:Sprite;

        public function ExternalInterfaceExample() {
            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");
                Timer(event.target).stop();
            }
        }
        private function clickHandler(event:MouseEvent):void {
            if (ExternalInterface.available) {
                ExternalInterface.call("sendToJavaScript", input.text);
            }
        }
    }
}

Para comprobar el código ActionScript anterior, incorpore el archivo SWF generado mediante la siguiente plantilla HTML:
 <!-- 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 thisMovie(movieName) {
         if (navigator.appName.indexOf("Microsoft") != -1) {
             return window[movieName];
         } else {
             return document[movieName];
         }
     }
     function sendToActionScript(value) {
         thisMovie("ExternalInterfaceExample").sendToActionScript(value);
     }
     function sendToJavaScript(value) {
         document.forms["form1"].output.value += "ActionScript says: " + value + "\n";
     }
 </script>
 </head>
 <body onload="pageInit();">

     <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
             id="ExternalInterfaceExample" width="500" height="375"
             codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab">
         <param name="movie" value="ExternalInterfaceExample.swf" />
         <param name="quality" value="high" />
         <param name="bgcolor" value="#869ca7" />
         <param name="allowScriptAccess" value="sameDomain" />
         <embed src="ExternalInterfaceExample.swf" quality="high" bgcolor="#869ca7"
             width="500" height="375" name="ExternalInterfaceExample" align="middle"
             play="true" loop="false" quality="high" allowScriptAccess="sameDomain"
             type="application/x-shockwave-flash"
             pluginspage="http://www.macromedia.com/go/getflashplayer">
         </embed>
     </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>
 




 

Enviarme un mensaje de correo electrónico cuando se añadan comentarios a esta página | Informe de comentarios

Página actual: http://livedocs.adobe.com/flash/9.0_es/ActionScriptLangRefV3/flash/external/ExternalInterface.html