Comunidad de diseño web y desarrollo en internet online

Problema comunicar Javascript on AS3

Citar            
MensajeEscrito el 30 May 2012 11:09 am
Hola!

Estoy intentando ejecutar una función de AS3 que tengo en un flash llamándola desde javascript, he seguido este tutorial: http://www.cristalab.com/tutoriales/como-comunicar-flash-y-javascript-en-actionscript-3-c50326l/ y no parece un tema demasiado complicado pero no se por que no me funciona, he mirado varios tutoriales más por google y todos vienen a decir lo mismo, he probado hacerlo de diferentes maneras y nada...imagino que es un fallo de esos que te estas días y al final es una tontería que no veías pero por si alguien me puede ayudar a ahorrarme esos días aquí lo dejo el código de prueba que estoy haciendo:

AS3

Código ActionScript :

import flash.external.ExternalInterface;

ExternalInterface.addCallback("sendToActionscript", callFromJavaScript);

function callFromJavaScript(valor):void{

box.alpha=valor;

}


Tengo un cuadrado con nombre de instancia box, la función funciona pues he probado de ejecutarla desde as3 y el objeto cambia su opacidad.

HTML

Código HTML :

<body>
<object id="FlashID" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="550" height="400">
  <param name="allowScriptAccess" value="always" />
  <param name="movie" value="js-as3.swf" />
  <param name="quality" value="high" />
  <param name="wmode" value="opaque" />
  <param name="swfversion" value="6.0.65.0" />
  <!-- Esta etiqueta param indica a los usuarios de Flash Player 6.0 r65 o posterior que descarguen la versión más reciente de Flash Player. Elimínela si no desea que los usuarios vean el mensaje. -->
  <param name="expressinstall" value="Scripts/expressInstall.swf" />
  <!-- La siguiente etiqueta object es para navegadores distintos de IE. Ocúltela a IE mediante IECC. -->
  <!--[if !IE]>-->
  <object type="application/x-shockwave-flash" data="js-as3.swf" width="550" height="400">
    <!--<![endif]-->
    <param name="quality" value="high" />
    <param name="wmode" value="opaque" />
    <param name="swfversion" value="6.0.65.0" />
    <param name="expressinstall" value="Scripts/expressInstall.swf" />
    <!-- El navegador muestra el siguiente contenido alternativo para usuarios con Flash Player 6.0 o versiones anteriores. -->
    <div>
      <h4>El contenido de esta página requiere una versión más reciente de Adobe Flash Player.</h4>
      <p><a href="http://www.adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Obtener Adobe Flash Player" width="112" height="33" /></a></p>
    </div>
    <!--[if !IE]>-->
  </object>
  <!--<![endif]-->
</object>
<script type="text/javascript">
swfobject.registerObject("FlashID");
</script>

<script type="text/javascript">

var flashObj = document.getElementById('FlashID');
flashObj.sendToActionscript(0.5);

</script>

<input type="button" onclick="flashObj.sendToActionscript(0.5);" />

</body>


Un saludo y gracias

Por Sergi0

42 de clabLevel



 

firefox
Citar            
MensajeEscrito el 30 May 2012 01:00 pm
Me resulta un poco raro como estas embebiendo el swf. Usualmente IE usa el tag embed, el resto de los navegadires Object, tu tienes dos tag object anidados, el de afuera tiene allowScriptAccess allways, el de adentro no. Revisa el código para meter el flash. Te recomiendo uses alguna librería como SWFObject para simplificar la forma de meter tu swf, http://code.google.com/p/swfobject/
Recuerda siempre poner el allowScrtiptAccess para que funcione JavaScript

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 30 May 2012 07:59 pm
Gracias Jorgue

El código del swf lo genere con Dreamweaver, probare con esa librería que me pasas y que no conocía, quizás venga de allí el error pues es lo único que no he probado modificar.

Un saludo y gracias de nuevo!

Por Sergi0

42 de clabLevel



 

firefox
Citar            
MensajeEscrito el 30 May 2012 08:48 pm
Sigue igual :( en la consola de firebug me dice esto:

Código :

flashObj.sendToActionscript is not a function

Por Sergi0

42 de clabLevel



 

firefox
Citar            
MensajeEscrito el 30 May 2012 08:59 pm
Ok, no habia mirado la parte de JS, esta mal, seria algo asi

Código :

function sendToAS(cant){
  var flashObj = document.getElementById('FlashID');
   flashObj.sendToActionscript(cant);
}
<input type="button" onclick="flashObj.sendToAS(0.5);" />


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 30 May 2012 09:07 pm
Esa es la manera del ejemplo para en una funciona crear la variable del flash y ejecutar funcion de AS3 pero es lo mismo.

Lo increíble es que he estado probando en varios browsers y en ie8 si funciona y en los otros no...

Por Sergi0

42 de clabLevel



 

firefox
Citar            
MensajeEscrito el 31 May 2012 08:02 am
Ya encontre de donde viene el fallo:

Código :

 <!--[if !IE]>-->
  <object type="application/x-shockwave-flash" data="js-as3.swf" width="550" height="400">


Si no se usa IE le aplica ese tag y como en ese tag no hay ID luego la función no la reconoce...hay que añadirle otro id (distinto al anterior) para que funcione en los navegadores que no son IE. Luego por javascript hacer una función que detecte el navegador del usuario y con un if ejecute la función asociada a un id o otro dependiendo de si se ha detectado ie o no.

De momento lo he dejado así y funciona en todos los browsers:

Código Javascript :

<script type="text/javascript">

var flashObjIe = document.getElementById('FlashID');
var flashObjNoIe = document.getElementById('FlashID2');
var navegador = navigator.appName 

function alpha(){
if (navegador == "Microsoft Internet Explorer"){
   flashObjIe.sendToActionscript(0.5);
   }
   else{
      flashObjNoIe.sendToActionscript(0.1);
   }
}
</script>

<input type="button" onClick="alpha()" />


Si se os ocurre una alguna otra idea más limpia soy todo oídos ;)

Por Sergi0

42 de clabLevel



 

firefox

 

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