Tutorial :ExternalInterface.call() not getting return value


I have a Javascript function that returns the innerHTML of a div. I am attempting to call this function from Actionscript and store the return value. I know that the Javascript function is being called because there is an alert that displays the return data, The data that is returned to Actionscript, however, is null. I am not sure what is causing this. Here is a code example of what I am attempting to do:

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";  }  

Like I said earlier, the alert shows up with the contents of the div but the text in the textfield is always "Returned Null", meaning that the ExternalInterface is available. I should add that I can only test this in IE7 and IE8. Any advice on what to do would be much appreciated.


This is a working sample based on the code you provided. You can right click it to view the source. I suspect the problem lies in the HTML for 'myDiv' or when you are making the actionscript call.


The source of the problem that I have been having has to do the object tag that I was using to embed the flash movie. I was using a tag that followed this example http://www.w3schools.com/flash/flash_inhtml.asp, I changed it to match this example: http://kb.adobe.com/selfservice/viewContent.do?externalId=tn_4150 and then I made sure that I added id to the object and everything worked.


Try adding as String to the call:

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


I also noticed you got a typo in your code => textField != textfield


Try to get the object back from your external interface call without casting it first, and take a look at it in the debugger. If it is not a string, trying to cast it to a string will result in null. This should be a string, but it doesn't hurt to see what you are actually getting back before you try to work with it.


It seems to me that your problem is that from javascript you are returning a string, the innerHTML property of your myDiv element. In actionscript you have datatyped the variable that the ExternalInterface call returns to as an Object, but it is a String. Maybe you have already caught this, but I can't tell as you haven't amended your code.

//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");  

Hope this was helpful, take care.


You should use the import statement

import flash.external.*;  

Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Next Post »