Integrar Flash y Javascript
- 25/03/2007
- 8:29 pm
Desde Flash 8 hay una clase llamada External Interface que permite la comunicación transparente entre Flash y Javascript. External Interface permite enviar objetos con argumentos complejos en comparación con Fscommand que se utilizaba antes para este tipo de comunicación.
Para utilizar External Interface es necesario desarrollar en Flash 8, y hay que tener en cuenta que no funciona en todos los navegadores pero si en la mayoría, entre los cuales tenemos el siguiente listado.
- Internet Explorer 5.0+
- Netscape 8.0+
- Mozilla 1.7.5+
- Firefox 1.0+
- Safari 1.3+
Comunicación de Flash a Javascript
Lo primero para lograr la comunicación es importar la clase External Interface, esto se hace de la siguiente manera.
-
import flash.external.ExternalInterface;
Luego el siguiente paso es llamar a la función call, la cual puede llamar a cualquier función definida en Javascript, para ello se le pasa como parámetro el nombre de la función Javascript a ejecutar.
-
ExternalInterface.call("functionName");
Veamos un ejemplo de uso de esta propiedad. Sea que tengamos un campo de formulario en el cual se ingresa el nombre del usuario, además de ello tenemos una función javascript el cual devuelve el texto ingresado en este campo.
Luego en una película flash si deseamos llamar a esta función desde un botón llamado btObtener tendríamos el siguiente código:
-
import flash.external.ExternalInterface;
-
btObtener.onPress = function() {
-
txtMensaje.text = ExternalInterface.call("getNombre");
-
}
Con lo cual obtendremos el siguiente resultado.
Comunicación de Javascript a Flash
El proceso inverso de comunicación se realiza con la función addCallback, el cual recibe tres parámetros los cuales son: Alias de la función, instancia donde se encuentra la función a llamar y finalmente el nombre de la función a ejecutarse.
-
ExternalInterface.addCallback("alias", instancia, funcion);
Como ejemplo en flash creamos un campo de ingreso de texto y luego con Javascript leeremos esta información. Entonces si tenemos un campo de texto llamado txtMensaje, creamos un función para obtener el texto ingresado en este campo y luego creamos una interface para poder leer desde Javascript.
-
import flash.external.ExternalInterface;
-
function getNombre() {
-
return txtMensaje.text;
-
}
-
ExternalInterface.addCallback("getNombre", this, getNombre);
Luego en el HTML podemos llamar directamente a esta función, anteponiendo el nombre del elemento flash, es decir si incluimos esta película flash utilizando SWFObject donde asignamos como ID mymovie, función para llamar los datos desde flash sería:
-
<title>Flash2Javascript</title>
-
<script type="text/javascript" src="swfobject.js"></script>
-
<script language="javascript">
-
function getInfo() {
-
alert(document.getElementById("mymovie").getNombre());
-
}
-
</script>
-
</head>
-
<div id="flashcontent"></div>
-
<script type="text/javascript">
-
var so = new SWFObject("javascript2flash.swf", "mymovie", "300", "80", "8", "#009933");
-
so.write("flashcontent");
-
</script>
-
<input type="submit" name="Submit" value="Obtener Nombre" onClick="getInfo();">
-
</body>
-
</html>
Con lo cual obtendremos el siguiente resultado:
Resumiendo para llamar a una función Javascript desde flash utilizaremos el método call y si deseamos que desde Javascript se llame a alguna función de flash tendremos que definirla utilizando la función addCallback.
Finalmente les dejo los archivos con los códigos fuente desarrollados en este post.
Posts Relacionados
- Yahoo Flash Developer Center
- jQuery Flash Plugin
- Google Talk Gadget
- swffit: Flash Resize Script
- Como usar SWFObject
Total de Comentarios: 20
hola he provaado todo y no me funciona tengo que descargar lgo mas par el flash tengo flash 8 y internet explorer 7.0 por que no ponen un archivo para descargar seria de mucha utilidad gracias….
Los archivos del ejemplo funcionando esta disponibles al final del post. De todas formas pongo el enlace: http://www.box.net/public/y65rlv6a91
hay que configurar el explorador por que me da un error que dice que el objeto no acepta el metodo y el error esta en l linea 7
Gracias ya me funciono…
Esta muy bueno, me va a ayudar mucho….
tengo un problema con document.getElementById(”mymovie”).getNombre() me a un error en esa linea dice que el objeto no acepta est propiedad o metodo que sera lguna fall en el archivo swfobject de verdd no se me gustria que me ayudaran agradesco su pronta respuesta
Hola:
He probado el ejemplo navegando en el sitio y me funciona. Pero cuando descargo los ficheros y los pruebo desde mi computadora me dice que el objeto no acepta esta propiedad.
Agredeceria mucho si alguien me ayudara.
solo funciona bajo servidor, en local tal cual no funciona
Bueno, pero le falta mas detallado con Cristalab por ejemplo
Esta perfecta esta información, ahi esta todo lo que se necesita, en cristalab han hecho demasiado lio.
Bueno, aca una pregunta para ver si alguien sabe si se puede.
Yo tengo un cuadro de texto con texto html.
en el texto html tengun un href, que quiero que haga una accion dentro del flash.
por ej. play()
alguien sabe si esto es posible????
Lo tuve que solucionar con javascript pero lo insólito es eso, tengo que llamar una funcion javascript que llame una función en actionscript. usando href=’javascript:llamarFuncion(…. etc…
Para ello existe una función llamada asfunction, que te permite llamar directamente a funciones de flash, por ejemplo para llamar a una función llamada playMovie que esta en el root:
<a href="asfunction:_root.playMovie">play</a>
Hola, queria saber si hay alguna forma de configurar el flash player para realizar pruebas locales con librerias externas javascript.
Cuando llamo a la función javascript mediante la clase ExternalInterface, ésta me devuelve un null, cuando me tendría q devolver el contenido de la barra de direcciones. Y en el browser me sale el siguiente error javascript: el objeto no acepta esta propiedad o método.
Qué puede pasar?
He puesto los parámetros allowScriptAccess a ‘always’ en el html q llama al flash.
hola… necesito hacer un juego de un conejo que salta y como frutas. pero las frutas son imagenes aleatorias que deben salir y moverse solas como el juego de happy rabbit que aparece por google pero no se el codigo que debo utlilizar para que se muevan sera que pueden ayudarmen lo mas antes posible.. se les agradece saludos
Hola
Me Pueden Ayudarme
porque en mi computadora esta mal cuando quiero abrir el gunbound de la pagina me sale javascript porque si yo lo tengo instalado el java man
Cuando llamo a la función javascript mediante la clase ExternalInterface, ésta me devuelve un null, cuando me tendría q devolver el contenido de la caja de texto. Y en el browser me sale el siguiente error javascript: el objeto no acepta esta propiedad o método.
Qué puede pasar?
Hola…..tengo mi animacion pero solo quiero que ingrese la hora que se actualiza cada segundo y la fecha, y no hacer niungun evento de boton…..¿se podra?
Hola, tengo una calculadora financiera en HTML y necesito embeberla un una pagina que esta en flash. He tratado de hacerlo utilizando la clase External Interface, pero no me funciona. Como lo puedo hacer?
Jose, Flash permite incluir algunos tags de HTML como esta explicado en http://blog.unijimpe.net/incluir-html-en-flash/ pero no permite embeber un html completo, solo se permite cargar archivos: swf, jpg, png, gif, mp3, flv, entre otros.



