Este es el desafío: tengo una película Flash que se integrará en una página utilizando una ID de DOM desconocida que deseo poder identificar/almacenar para la devolución de llamada en una función JS.¿Puede una función de JavaScript detectar qué objeto DOM de Flash lo llamó?
Mi flujo de usuario ideal sería:
- usuario hace clic en el botón en Flash.
- Flash pausa cualquier animación/video/sonidos/etc.
- Flash llama a una función JS inyectada para mostrar una experiencia de superposición de página.
- Cuando el usuario cierra la experiencia de superposición, se invoca un método de devolución de llamada en el objeto Flash.
- El flash reanuda la reproducción.
El problema es que cuando AS3 utiliza el método ExternalInterface.call ("functionName", args ...), no parece haber un evento DOM activado, y por lo tanto es imposible decir qué objeto llamada función JS, por lo que parece que tener una función "registerMe()" no funciona. Básicamente, la función JS inyectada no tiene forma de determinar qué objeto DOM llamar, porque el ID del objeto Flash es desconocido.
[ACTUALIZACIÓN] Resulta que un archivo SWF puede determinar su propia URL utilizando loaderInfo.url. Estoy pasando esa información al script que inicia la experiencia de superposición para que pueda almacenarse para una futura comparación con todos los objetos DOM application/x-shockwave-flash. Cuando se encuentra una coincidencia, ese es el SWF que realiza la llamada. ¿Alguien ve un defecto en esta lógica? (No soy tan competente con JS como con AS)
A veces tengo pesadillas sobre tratar de hacer que Flash y JS trabajen juntos. – sdleihssirhc
Siempre existe la técnica de la fuerza bruta de encontrar todos los archivos SWF en la página y probar la función de devolución de llamada en cada uno de ellos, pero eso me parece arriesgado e irresponsable, por lo que no está realmente sobre la mesa. –
¿tienes control del swf? –