swf new javascript jquery flash actionscript-3 swfobject

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:

  1. 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);

  2. Use esto para el HTML:

    <body> <div id="flashDiv"></div> </body>

  3. 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]; } }

  4. Llame al método Flash:

    function callFlashMethod() { thisMovie("${swf}").js_method_to_call(); }