javascript - new - embed swf
Cómo llamar al método de devolución de llamada flash actionscript desde javascript? (5)
No estoy seguro acerca de esta línea:
var flashFile = eval("window.document.test");
Yo usaría:
var flashFile = document.getElementById("test");
Además, supongo que esto fue solo un error al pegar al pegar aquí, pero flashFile.js_method_to_call;
debe ser flashFile.js_method_to_call();
Traté de llamar a un método de devolución de llamada flash desde JavaScript. Pero parece que no funciona. El código de ejemplo del script de acción flash es como a continuación [Simplificado]:
import flash.events.ActivityEvent;
import flash.events.StatusEvent;
import flash.external.ExternalInterface;
var test_var = ExternalInterface.addCallback("js_method_to_call", flash_method);
function flash_method()
{
return "test";
}
El código de ejemplo de javascript se escribe debajo de [Simplified]:
function callFlashMethod(){
var flashFile = eval("window.document.test");
flashFile.js_method_to_call;
}
function loadTest(){
swfobject.embedSWF("test.swf", "test", "1", "1", "10.0.0", false);
}
$(document).ready(function(){
loadTest();
callFlashMethod();
});
Siempre se muestra el error en la consola de errores de fuego "flashFile.js_method_to_call no es una función".
Obtiene una referencia a su objeto SWF incrustado y lo utiliza para realizar una llamada a su método as3.
//AS3 Code
ExternalInterface.addCallback("helloFromJS",helloFromJS);
private function helloFromJS():void
{
trace("JS is saying hello");
}
//HTML Code
<object width="100%" height="100%" id="Test">
<param name="movie" value="Test.swf"/>
//JS Code
var swfObject = document.getElementById("Test");
swfObject.helloFromJS();
Aquí hay algo que debería funcionar realmente bien:
Utilice SWFObject.js para incrustar el contenido de Flash:
// Embedding through SWFObject rocks in comparison with Adobe shits: var flashvars = {}; var params = {}; params.menu = "false"; params.salign = "t"; params.scale = "noscale"; params.wmode = "transparent"; params.allowScriptAccess = "always"; var attributes = {}; attributes.id = "${swf}"; swfobject.embedSWF("${swf}.swf", "flashDiv", "${width}", "${height}", "9.0.0", "", flashvars, params, attributes);
Use esto para el HTML:
<body> <div id="flashDiv"></div> </body>
Para llamar a su método Flash, use este patrón:
// Functions needed for calling Flex ExternalInterface function thisMovie(movieName) { if (navigator.appName.indexOf("Microsoft") != -1) { return window[movieName]; } else { return document[movieName]; } }
Llame al método Flash:
function callFlashMethod() { thisMovie("${swf}").js_method_to_call(); }
Aquí hay un tutorial interesante y bastante detallado http://bytes.com/topic/flash/answers/694359-how-do-i-access-flash-function-using-javascript#post2759970
Esta página describe la solución muy bien, solo intenta hacer que esa muestra funcione. Entonces puedes resolver el problema y la respuesta de Vladimir Tsvetkov está completa.