2010-01-12 15 views
9

¿Hay alguna forma de obtener una lista de las funciones expuestas de un objeto Flash? Por ejemplo, se puede obtener una lista de todos los métodos de un objeto mediante la ejecución:Obtener definiciones de ExternalInterface en Javascript

for (var i in object) { 
    if (typeof object[i] == "function") { 
    console.log(i); 
    } 
} 

El único problema es que esto no va a exponer a cualquiera de los métodos registrados a través de la API ExternalInterfaces. Puedo probar y ver si la función existe (object['method']) y me dice que es una función, pero tendría que adivinar todos los métodos existentes de esta manera.

NOTA: Obviamente, no tengo acceso al actionscript.

Respuesta

-1

Mi instinto es que no, ExternalInterface es esencialmente una caja negra, o un buzón negro, se abre paso y a veces las cosas vuelven, pero no se puede abrir la puerta para ver lo que hay adentro.

Sin documentación sobre lo que se ha expuesto en el SWF, la única otra sugerencia es descompilar el swf para echar un vistazo a la fuente.

1

El problema es aún peor: la información no está disponible en ActionScript. Registra una nueva función como ExternalInterface.addCallback('foo', foo) y no puede listar devoluciones de llamadas ya registradas.

1

Sólo una conjetura, sino ver si funciona. Todas las funciones de ExternalInterface se deben definir en el espacio de nombres global. Intente incrustar el archivo SWF en una página HTML y obtenga todas las funciones de Javascript definidas para la página una vez que la haya cargado. List of global user defined functions in JavaScript?

La lista de funciones debe ser la definida en el archivo SWF.

2

Sólo tiene que darle a esta pregunta, un poco a finales de lo que parece, pero voy a publicar una respuesta de todos modos;) El uso de IE10 (Windows 7) funcionó perfectamente bien para mí a la lista con todos mis métodos de esta manera:

var obj = document.getElementById('flashObj'); 
for(var prop in obj){ 
    var fx = obj[prop]; 
    if(obj.hasOwnProperty(prop) && (typeof fx == 'function') && /eval\(instance/.test(fx)){ 
    console.log(prop) 
    } 
} 

Tenga en cuenta que esto no funcionó en Chrome o Firefox y solo con la expresión regular exacta, ya que IE10 no informa el "código nativo" como lo hacen los otros navegadores.

Cuestiones relacionadas