/ / La retrollamada de interfaz externa no funciona: javascript, jquery, flash, actionscript-3, externalinterface

La devolución de llamada de ExternalInterface no funciona: javascript, jquery, flash, actionscript-3, externalinterface

Estoy tratando de llamar a una función en mi ActionScriptdesde mi JavaScript, he logrado hacer esto con éxito con otro archivo flash, pero en el actual está fallando por alguna razón. Estoy usando jQuery SWFEmbed, este es mi código JS:

$.ajax({
url: "<?php echo $html->url(array("controller" => "voicenotes", "action" => "get_url"), true);?>" + "/" + container.children("#VoicenoteVnid").val(),
dataType: "json",
type: "POST",
success: function(response) {
container.children(".voicenote-info").children(".player").addClass("active");
flashMovie = container.children(".voicenote-info").children(".player");
alert(flashMovie.html());
flashMovie.flash({
swf: "<?php echo $html->url("/files/flash/reproductor_compact.swf",true); ?>",
width: 240,
height: 40,
quality: "high",
wmode: "transparent",
allowscriptaccess: "always",
});
alert($(".player.active > object")[0].callIt());
}
});

Y aquí está mi código AS, esto está en mi constructor:

public function reproductor()
{
ExternalInterface.addCallback("callIt", test);
ExternalInterface.call("alert", "Que fue?");
trace(ExternalInterface.available);
}

Y esta es mi función:

private function test():String {
return "this is a test";
}

El trabajo de ExternalInterface.call y la traza de resultados son verdaderos, no tengo idea de lo que está sucediendo.

P.S: Si también pudiera decirme cómo puedo pasar parámetros a una devolución de llamada ExternalInterface, lo apreciaría.

Respuestas

2 para la respuesta № 1
  1. Tal vez su selector Jquery para encontrar su objeto SWF está mal. ¿Por qué no tratas de hacer? ¿Otra forma, solo para depurar?
  2. Tal vez usted está llamando a su función AS3 antesel SWF se ha cargado completamente. ¿Por qué no intenta colocar esa llamada de función (callIt) en un botón, fuera de Ajax, y presionarla después de que se haya llamado su alerta?

Para recibir un parámetro dentro de su función de devolución de llamada, simplemente envíelo por JS y recíbalo como un argumento en su función de devolución de llamada. Ex.:

$(".player.active > object")[0].callIt("LOLSOME")

...

ExternalInterface.addCallback("callIt", test);
private function test(arg:String):String {
return "param received from JS: " + arg;
}