ExternalInterface返回到AS3在IE中不一致工作

ExternalInterface return to AS3 not working consistently in IE

本文关键字:不一致 工作 IE 返回 AS3 ExternalInterface      更新时间:2023-09-26

因此,我在从ExternalInterface调用返回值时遇到了一些问题。我有一段代码,看起来像这样:

var a:String = String(ExternalInterface.call("function() { var returnTest = 'test'; alert(returnTest); return returnTest;}"));
ExternalInterface.call("alert", a);

第一个警报(在第1行的匿名函数中)是正确的(显然)。然而,在IE10中,第2行的警报90%的时间都返回空值。不过,它在Firefox中每次都能工作。

为了进一步解释90%时间工作的问题,我似乎可以通过添加或删除看似毫无意义的警报来再次决定它是否有效。例如:假设它不工作,我可以添加一个警报,它就会开始工作。或者,假设它正在工作,我可以添加一个警报进行调试,但它停止工作,删除警报,仍然不工作,重新添加警报,然后它又开始工作。我知道这不是事实,但它的行为就像每次添加或删除警报时都会翻转硬币一样。

这一切只发生在IE中,每次在Firefox中都能完美工作。

谢谢。

编辑:我提供的代码不是需要工作的实际代码,而是我为验证问题所在而编写的代码。实际情况是,我们需要知道Flash运行的环境中有一个JavaScript属性,但我们无法访问SWF运行的HTML或JavaScript。我需要运行的实际代码看起来更像这样:

var pageNameFromJS:String = String(ExternalInterface.call("function() { var pageName = ServerObject.currentPage.name; alert(pageName); return pageName;}"));
ExternalInterface.call("alert", pageNameFromJS);

第一行中的警报只是为了确保ServerObject.currentPage.name有效,它确实有效。第二行中的警报是在我们注意到需要pageNameFromJS的函数不工作时添加的调试代码。

真的不知道你为什么要把事情复杂化;)

你可以做得更容易:

AS3代码:

ExternalInterface.addCallback("flash_function", flash_function);
function flash_function(from_js_param){
    trace('param received from js : '+from_js_param)
}
ExternalInterface.call("js_function", to_js_param)

JS代码:

function js_function(from_flash_param){
    var to_flash_param = 'I received your '+from_flash_param;
    (get_your_swf).flash_function(to_flash_param);
}