2008-11-23 18 views
6

En un nivel más abstracto que a previous question, en mi experiencia hay 3 formas de llamar a una función javascript en una página html desde un .swf incrustado utilizando AS3: ExternalInterface, fscommand y navigateToURL.ActionScript3 a la comunicación JavaScript: mejores prácticas

Vamos a comparar y contrastar estos métodos (y tal vez otros no he enumerados) y hablar de los pros y los contras de cada uno - en este momento, ExternalInterface parece como el camino a seguir en términos de flexibilidad, pero es correcto para todas las situaciones? ¿Hay beneficios concretos en términos de velocidad de ejecución o algo así? Tengo curiosidad, ¿qué pensamos?

Respuesta

6

ExternalInferface se creó para facilitar la comunicación entre JS y Flash, por lo que realmente no tiene sentido utilizar cualquier otra cosa. La práctica común es comprobar si está disponible primero al evaluar el valor de la propiedad ExternalInterface.available antes de realizar una llamada a algunos JS. Esta propiedad le dice si el SWF desde el que desea llamar a algunos JS está dentro de un contenedor que ofrece una interfaz externa. En otras palabras, si se usa ExternalInterface funcionará. Si no está disponible, solo usa flash.net.sendToUrl. Nunca use fscommand() ya que usa VBScript y puede causar conflictos con otro VBScript en una página. Además, solo puede enviar una cadena de argumentos con fscommand y debe dividirla en el lado JS.

+0

bien - Me gusta, eso es lo que estaba hecho, lo de VBScript, lo de un solo argumento y navigateToURL como alternativa, entonces, cuando comprueba la disponibilidad de ExternalInterface, ¿está revisando el flash side, o de alguna manera está comprobando para ver si javascript está allí? –

+0

Actualicé mi respuesta un poco. –

+0

bien, eso tiene sentido. –

5

Todo depende de si desea que la comunicación sea sincrónica o no como ExternaInterface puede devolver datos como dónde y navigatoToURLfscommand son asíncronos y sólo se puede llamar a una función javascript; no pueden devolver valores o una respuesta.

a partir de documentos vivos en relación con la interfaz externa:

De ActionScript, puede hacer lo siguiente en la página HTML:

  • Llame a cualquier función de JavaScript.
  • Pase cualquier cantidad de argumentos, con cualquier nombre.
  • Pase varios tipos de datos (Booleano, Número, Cadena, etc.).
  • Reciba un valor de retorno de la función de JavaScript.

De JavaScript en la página HTML, puede:

  • llamada a una función ActionScript.
  • Pasar argumentos utilizando la notación de llamada a función estándar.
  • Devuelve un valor a la función JavaScript.

La clase flash.external.ExternalInterface es un reemplazo directo para la clase flash.system.fscommand.

Entonces, el uso de ExternalInterface es el método preferido o la comunicación entre flash y una función de Javascript, aunque si la llamada es meramente asincrónica, está bien usar flash.net.navigateToURL.

+0

el punto asincrónico es bueno. –

2

ExternalInterface

  • Usted puede obtener el valor de retorno de JS-AS y AS-JS llamadas
  • Codifica sus argumentos (llamada con matrices, objetos, etc. No hay necesidad de codificarlos)
  • entre navegadores
  • impreciso cuando se envía HTML o JSON (codificación especial), que breaks internally

getUrl

  • Sólo puede llamar a JS, no se obtiene el valor de retorno y que necesita para codificar los datos
  • era agradable de lo obsoleto y en Flash 10 se retira
  • es realmente eliminado , por lo que no lo use;)

fscommand

  • Vamos, ExternalInterface es la solución (para 2008).
+0

bien puesto - la desaprobación y la posterior eliminación en flash 10 cinch es para mí. –