ExternalInterface.call()没有获得返回值

时间:2009-03-31 14:22:19

标签: javascript flex flash actionscript-3

我有一个Javascript函数,它返回div的innerHTML。我试图从Actionscript调用此函数并存储返回值。我知道正在调用Javascript函数,因为有一个显示返回数据的警报,但返回到Actionscript的数据为null。我不确定是什么原因造成的。这是我尝试做的代码示例:

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

就像我之前说的那样,警报显示div的内容,但textfield中的文本始终是“Returned Null”,这意味着ExternalInterface可用。我应该补充一点,我只能在IE7和IE8中测试它。任何有关做什么的建议都将不胜感激。

7 个答案:

答案 0 :(得分:3)

根据您提供的代码

This is a working sample。您可以右键单击它以查看源。我怀疑问题在于'myDiv'的HTML或者你正在进行动作调用。

答案 1 :(得分:2)

我遇到的问题的根源是必须使用我用来嵌入flash影片的对象标签。我使用的是跟随此示例http://www.w3schools.com/flash/flash_inhtml.asp的标记,我将其更改为与此示例匹配:http://kb.adobe.com/selfservice/viewContent.do?externalId=tn_4150然后我确保向对象添加了id并且一切正常。

答案 2 :(得分:0)

尝试在呼叫中添加as String

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

答案 3 :(得分:0)

我还注意到你的代码中有拼写错误=> textField!= textfield

答案 4 :(得分:0)

尝试从外部接口调用中取回对象,而不先将其强制转换,然后在调试器中查看它。如果它不是字符串,尝试将其强制转换为字符串将导致null。这应该是一个字符串,但是在尝试使用它之前看看你实际上得到的东西并没有什么坏处。

答案 5 :(得分:0)

在我看来,你的问题是从javascript返回一个字符串,你的myDiv元素的innerHTML属性。在actionscript中,您已将ExternalInterface调用返回的变量数据类型化为Object,但它是一个String。也许你已经抓住了这个,但我不能告诉你,因为你没有修改你的代码。

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

希望这很有帮助,小心。

答案 6 :(得分:-1)

您应该使用import语句

import flash.external.*;