Si querremos llamar una función flash desde javascript, sería de la siguiente manera.
Suponiendo que hemos utilizado swfobject para la impresión del flash sobre la página de la siguiente manera:
swfobject.embedSWF("Index.swf", "nuestroflash", "100%", "100%", "10.0", '', flashvars, params, attributes);
Entonces nos damos cuenta que el id que le colocamos a nuestro flash es "nuestroflash".
Entonces para llamar la función de flash pondremos lo siguiente en javascript:
//código javascript
var flashObj = document.getElementById('nuestroflash');//traer instancia del flash con el id
flashObj.nombredelafuncion("este es mi nombre", "este es mi apellido"); //llamar la funcion con 2 parametros
//pueden enviarse los parametros que se quieran, 3,4, 5 o más o ninguno.
Si se quiere, se puede colocar ese código dentro de una función javascript, o como deseen.
Es importante tener en cuenta que el código javascript se debe ejecutar en cualquier momento, pero inmediatamente después que este cargado el flash.
Ahora bien, para que funcione ese llamado de la función, hay que registrarlo en el código AS3. De la siguiente manera, si se desea, mejor en el primer frame de nuestro FLA.
//código AS3
// registrar al flash la función
//con respecto a la linea siguiente, solo se coloca el nombre de la función, sin parámetros.
//el primer parámetro de addCallback es el nombre de la función javascript, y el segundo, la función que llamará en AS3. Para no confundirnos sencillamente dejo el mismo nombre a los dos parámetros.
ExternalInterface.addCallback("nombredelafuncion", nombredelafuncion);
function nombredelafuncion(parametro1:String, parametro2:String){
//haz ahora si lo que quieras desde javascript
}
Como vimos en el AS3, debemos de colocar el tipo de variable que estamos enviando por el javascript. En este caso, dos cadenas de texto.
Bueno, espero les sirva de algo. Sean felices! ;)
Dar las gracias es siempre agradable. Si tienes dudas, has tu comentario y pregúntame...
donde estan los archivos para descargarlos?
ResponderEliminarLamento decirte que no deje publicado un ejemplo para descargar... solo el código. Saludos.
ResponderEliminarHola estoy muy interesado en este tema (parece muy sencillo) pero no consigo que funcione de ninguna manera. Desde AS3 llamar a la función javaScript Lo hago sin problemas pero a la inversa no lo consigo.
ResponderEliminarSi fuera posible me encantaría ver un ejemplo funcional para probar. Te dejo mi correo por si tuvieras el detalle de remitirme
Gracias de antemano.
drawdesign@gmail.com Se me olvidó poner el correo :).
EliminarColoca tu codigo html como imprimes el swf.
EliminarColoca el codigo as3 que registra la función.
Hola! yo tengo el mismo problema que Alberto Sànchez.
ResponderEliminarDesde AS3 llamo sin problemas la funciòn en javascript pero una vez ejecutando la funciòn javascript ya no regresa al Flash.
En el AS tengo esto:
package {
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.external.ExternalInterface;
import flash.text.TextField;
public class main extends MovieClip {
public var mcPrueba:MovieClip;
public var txtTrace:TextField;
public function main() {
init();
}
private function init():void{
ExternalInterface.addCallback("myFlashcall",myFlashcall); //Registra la funciòn que se llama desde el javascript
mcPrueba.addEventListener(MouseEvent.CLICK, onClick);
}
public function myFlashcall(str:String):void{
txtTrace.text = "myFlashcall: "+str;
}
protected function onClick(event:MouseEvent):void{
ExternalInterface.call("myFBcall");
}
}
}
y en el HTML tengo esto:
function myFBcall(){
alert("Se invoca la funciòn desde el Flash");
var varMyFlash = document.getElementById("myFlash");
alert("si creò la variable Flash");
varMyFlash.myFlashcall('datoDesdeJavascript');
alert("Finalizarìa");
}
Ya no llega a la alerta "Finalizarìa" :-( Alguna idea?
Muchas gracias
Aah ya lo pude resolver.
ResponderEliminarPor si alguien llega aquì buscando la respuesta; pues resulta que era la manera de cargar el SWF.
No puse atenciòn en la parte donde cargabas el swf con la librerìa swfobject.embedSWF.
Y como hacer caso de eso si yo no tenìa ni zorra idea que existìa tal cosa.
Acà incluyo la info que explica la librerìa:
http://blog.unijimpe.net/swfobject-20/
Saludos ^^
Me alegra que hayas podido solucionar tu problema. Y que de algo te haya ayudado este post.
EliminarSaludos.