2009-06-29 18 views
8

¿Es posible enviar una matriz desde Flash (AS3) a JavaScript utilizando una llamada ExternalInterface?Enviar matriz desde Flash (AS3) a JavaScript

Actualmente estoy llamando a una función varias veces desde un bucle 'por cada' dentro de Flash, pero va demasiado rápido para que JavaScript se mantenga al día.

Mi idea es crear una matriz de atributos, pasarlos a la función JavaScript y luego recorrerlos en JavaScript.

Gracias, Josh

+1

acaba de encontrar lo que esta causando tal vez mis problemas http://www.scottgmorgan.com /blog/index.php/tag/externalinterface/ Todavía interesado en la matriz, si es posible. – Josh

Respuesta

7

Además de la sugerencia de usar JSON, esto debería ser más rápido para matrices pequeñas y no requeriría el uso de eval o una biblioteca externa para analizar. Unirse a una matriz en una cadena como esta flash:

elemento1 | elemento2 | elemento3 | elemento4

pasar la cadena a la JS, que se dividió de nuevo usando split ("|")

+0

buena idea, gracias. – Josh

+5

¡Solo asegúrese de que sus datos nunca contengan el (los) carácter (es) separador (es)! – singpolyma

6

Siempre se puede crear un objeto JSON y pasar esa tener JavaScript.

+1

JSON está bien y hay muchas bibliotecas que puede usar tanto en Actionscript como en Javascript. En este caso, sin embargo, el jugador maneja la serialización por usted, entonces yo solo usaría objetos AS nativos. Es más simple, ya está disponible y probablemente más rápido. –

+0

mientras recibe un objeto json, ¿cómo lo almacena en flash en una cadena? –

8

sí, es posible.

http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/external/ExternalInterface.html#call()

... argumentos - Los argumentos para transmitir a la función en el contenedor. Usted puede especificar cero o más parámetros, separándolos con comas. Pueden ser de cualquier tipo de datos de ActionScript. Cuando la llamada es a una función de JavaScript, los tipos de ActionScript son convertidos automáticamente a tipos de JavaScript; cuando la llamada es a algún otro contenedor ActiveX, los parámetros están codificados en el mensaje de solicitud .

Una prueba rápida:

AS código:

if(ExternalInterface.available) { 
    ExternalInterface.call("jsTest", [0,1,"two",{a:1,b:2}]); 
} 

JS código:

function jsTest(arg) { 
    alert(arg); 
} 
Cuestiones relacionadas