2009-03-31 21 views
6

Tengo una función de Javascript que devuelve el innerHTML de un div. Estoy intentando llamar a esta función desde Actionscript y almacenar el valor de retorno. Sé que se está llamando a la función Javascript porque hay una alerta que muestra los datos de retorno. Sin embargo, los datos que se devuelven a Actionscript son nulos. No estoy seguro de qué está causando esto. Aquí está un ejemplo de código de lo que estoy tratando de hacer:ExternalInterface.call() no obteniendo el valor de retorno

Javascript: 
function JSFunc() { 
    var x = document.getElementById("myDiv"); 
    alert(x.innerHTML); 
    return x.innerHTML; 
} 

Actionscript: 
import flash.external.*; 
if (ExternalInterface.available) { 
    var retData:Object = ExternalInterface.call("JSFunc"); 
    if(retData != null) { 
      textField.text = retData.toString(); 
    } else { 
      textField.text = "Returned Null"; 
    } 
} else { 
    textField.text = "External Interface not available"; 
} 

Como he dicho antes, la alerta se presenta con el contenido del div pero el texto en el campo de texto es siempre "un valor nulo", lo que significa que la interfaz externa está disponible. Debo añadir que solo puedo probar esto en IE7 e IE8. Cualquier consejo sobre qué hacer sería muy apreciado.

Respuesta

-1

Se debe utilizar la sentencia import

import flash.external.*; 
+0

Lo siento, me olvidé de mencionar que ya estaba haciendo eso. –

0

Trate de añadir as String a la llamada:

textField.text = ExternalInterface.call("JSFunc") as String; 
+0

Dio typecasting un tiro pero no dados. –

0

También me di cuenta que tienes un error tipográfico en el código => textField = campo de texto

+0

Disculpe el error, el código es un ejemplo, no lo que en realidad estoy usando. –

+0

Bueno, no hay nada de malo en ese código, a menos que otra parte de tu código esté jugando con el contenido del campo de texto. – Claudio

0

Trate de recuperar el objeto de su llamada de interfaz externa sin lanzarlo primero, y échele un vistazo en el depurador. Si no es una cadena, intentar convertirla en una cadena dará como resultado nulo. Esto debería ser una cadena, pero no hace daño ver lo que realmente está recuperando antes de intentar trabajar con él.

+0

El objeto es nulo, es lo que el depurador me está diciendo. –

3

This is a working sample según el código que ha proporcionado. Puede hacer clic con el botón derecho para ver la fuente. Sospecho que el problema radica en el HTML para 'myDiv' o cuando está haciendo la llamada actionscript.

+0

Gracias por mostrar que el código en sí no es el problema, estoy pensando que el problema podría ser con la etiqueta de objeto que utilicé para incrustar la película en IE. ¿También cómo ver el javascript y el div que usaste? –

+0

nm, encontré el javascript y div. –

0

Me parece que su problema es que desde javascript está devolviendo una cadena, la propiedad innerHTML de su elemento myDiv. En actionscript, tiene el tipo de datos de la variable a la que la llamada ExternalInterface vuelve como un Objeto, pero es una Cadena. Tal vez ya haya entendido esto, pero no puedo decirlo ya que no ha modificado su código.

//The following is an Object 
var x = document.getElementById("myDiv"); 

/* 
You are returning the innerHTML property of x, a string, but on the 
flash end your expecting an object in your actionscript. 
*/ 
return x.innerHTML; 

//The following seems incorrect to me. 
var retData:Object = ExternalInterface.call("JSFunc"); 

//Should be 
var retData:String = ExternalInterface.call("JSFunc"); 

la esperanza que esto era útil, tenga cuidado.

Cuestiones relacionadas