Tutorial :ExternalInterface.call() not getting return value



Question:

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.


Solution:1

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.


Solution:2

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.


Solution:3

Try adding as String to the call:

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


Solution:4

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


Solution:5

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.


Solution:6

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.


Solution:7

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
Previous
Next Post »