Comunidad de diseño web y desarrollo en internet online

Comunicar Javascript con Flash

Citar            
MensajeEscrito el 07 Jun 2013 09:30 am
Hola a todos, tengo un problemilla y seguro que me pueden ayudar.
Tengo un AS3 que, una vez ya cargado, necesita recibir variables provinientes de Javascript. Supongamos que en la página contenedora tengo un botón que cada vez que es pulsado llama a una función de Javascript. Dicha función debería enviar un mensaje al Flash y éste al recibirlo hace lo que sea.
Hay alguna forma de reproducir este comportamiento?
No quiero tener un Timer en el flash que esté comprobando continuamente si el botón ha sido pulsado o no.

Muchas gracias

Por Palacio

Claber

198 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Jun 2013 09:53 am
BuenAS:

Echa un vistazo a ExternalInterface

Para comunicar el swf con JavaScript, en el swf con ExternalInteface.call(nombreFuncionJavaScript, parametro) puedes hacer llamadas a funciones JavaScript. En este caso se llamaría a la función "nombreFuncionJavaScript" y esta recibiría el valor que pasas dentro de "parametro".

Para comunicar JavaScript con el swf, con ExternalInterface.addCallback(nombreFuncionActionScript) haces que el método "nombreFuncionActionScript" sea visible desde fuera del swf, así, si tu película swf (en el HTML) se llama "pelicula" haciendo desde JavaScript:

pelicula.nombreFuncionActionScript();

llamarías al método del swf

Un saludo.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 07 Jun 2013 10:47 am
Hola Lukánicos, hasta el momento tengo lo siguiente:

Código ActionScript :

package src
{
   import flash.display.MovieClip;
   import flash.external.ExternalInterface;
   
   public class Main extends MovieClip
   {
      public function Main() 
      {
         ExternalInterface.addCallback("callFlashFuction", callFlashFuction);      
      }
      public function callFlashFuction(_msg):void
      {
         trace(_msg);
      }
   }
}

Código HTML :

<object id='FLASH'
      classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
      codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0"
      width="100%"
      height="100%">
   <param name="AllowScriptAccess" value="always"/>
   <param name="src" value="mySWFMovie.swf"/>
   <embed name="FLASH"
         pluginspage="http://www.adobe.com/go/getflashplayer"
         src="mySWFMovie.swf"
         width="100%"
      height="100%">
         allowscriptaccess="always"/>
</object>

Código Javascript :

function getMyApp(appName) {
   if (navigator.appName.indexOf("Microsoft") != -1) {
      return window[appName];
   } else {
      return document[appName];
   }
}
function sendCMD() {
   getMyApp("FLASH").callFlashFuction("Mensaje desde JAVASCRIPT")
}

Pero no consigo que funcione. Alguna idea?

Muchas gracias

Por Palacio

Claber

198 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Jun 2013 11:08 am
Hola, funcionó con el código que hay arriba, quizás tenia algo en la caché o similar. La cuestión es que funciona.

Muchas gracias

Por Palacio

Claber

198 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Jun 2013 11:19 am
Posibles problemas:

Cuando un swf se comunica con JavaScript da errores de seguridad se se ejecuta en local. Pruébalo en un servidor o configura la carpeta donde está como segura.

Por otro lado, antes de llamar desde JavaScript al método del swf debes asegurarte de que el swf ya se ha cargado. Puedes utilizar el evento onload del body (HTML) para asegurarte de que la página se ha cargado antes de llamar a dicho método.

Un saludo.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 07 Jun 2013 11:21 am
...acabo de comprobarlo con tu código y funciona, pero como digo, viéndolo en una carpeta segura (utilizo Flash Builder y las carpetas de publicación las hace seguras automáticamente) y esperando a que se haya cargado la página para llamar al método del swf.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.