2010-02-17 53 views
1

我打电话与ExternalInterface.call一个JS的功能,并试图进去的Flash返回值返回一个变量。当我追踪操作变量时,我得到0而不是500.我的嵌入代码有什么问题吗?从ExternalInterface.call()返回到闪存

嵌入代码:

<embed src="/sites/default/files/flash/flashgame/Preload.swf" width="975" height="572" align="middle" FlashVars="entry=login" quality="high" bgcolor="#ffffff" name="slider" allowScriptAccess="always" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /> 

JS:

function get_current_points(){ 
    // Hardcoded return value for testing 
    return 500; 
} 

的ActionScript:

var op:Number = ExternalInterface.call("get_current_points") as Number; 
+3

任何东西之前 - 你为什么,在这个例子中,称“get_current_points”当函数名称是“leansy_get_current_points”? – 2010-02-17 11:22:05

+0

我编辑它。这只是我的问题中的一个错误,在我的代码中匹配的功能。 – knuckfubuck 2010-02-17 16:26:05

回答

1

@knuckfubuck,我想你没有使用RobertBak指出的正确的函数名。否则,当我在我的m/c上运行代码时,代码非常好。

@ OXMO456,“作为数”无关这个问题。在这种情况下,'Number(Ext ....)'和'Ext .. as Number'工作正常。

希望它有帮助, Ashine。

============================================== =================================

@khuckbuck在回复您的评论时,我确定函数在Flex中不可见。尝试在flex内部使用'if(ExternalInterface.available)'来检查接口是否可以灵活访问。这将帮助我们指出问题。

+0

你是对的! :| – OXMO456 2010-02-17 13:51:01

+0

我编辑了我的问题。函数名称不匹配只是我的问题。在它们匹配的代码中,返回变量不起作用。 – knuckfubuck 2010-02-17 16:27:04

+0

嗯。在这种情况下,我确定该功能在Flex中不可见。尝试在flex内部使用'if(ExternalInterface.available)'来检查接口是否可以灵活访问。这将帮助我们指出问题。 – Ashine 2010-02-18 08:11:26

0

它只是在这个例子中,也可以是你有在功能上的不匹配名字呢?

因为值应该是NaN而不是0,如果您没有得到有效的返回值。

,否则你的代码似乎是正确的。

+0

如果我把“as Number”铸件拿下来,拿到NaN,我就拿到了0. – knuckfubuck 2010-02-17 16:29:58

0

我认为你得到0因为你正在使用:as Number

使用Number(ExternalInterface.call("get_current_points"))代替。

1

另外,我不认为你可以从外部接口调用的返回值。我认为你需要设置一个回调函数。 ActionScript调用JavaScript,然后JS使用单独的函数调用AS。

如果您必须等待每个交叉脚本调用的返回值,那么它可能会使您的电影变慢。在Flash

0

获取返回的值是有风险的。它在所有浏览器上都无法正常工作。其实我正在修改我的代码因为Internet Explorer拒绝发送返回的值。我建议使用贾斯汀普特尼的建议。

问候