Firefox 调用ExternalInterface.call时,如何防止浏览器变得无响应?

Firefox 调用ExternalInterface.call时,如何防止浏览器变得无响应?,firefox,actionscript,Firefox,Actionscript,我有一部flash电影,我正在使用ExternalInterface.call函数从电影中调用javascript函数。问题在于,每当在Mozilla Firefox中执行javascript函数时,浏览器就会变得无响应。我在这里上传了这个文件:这是一张印度地图,当你点击最顶端的州(查谟和克什米尔州)时,会调用javascript函数。在一个新窗口中打开它…它可能会使您的浏览器也没有响应 你的方法有两个错误: 您可以直接从ExternalInterface.call调用javascript函数

我有一部flash电影,我正在使用ExternalInterface.call函数从电影中调用javascript函数。问题在于,每当在Mozilla Firefox中执行javascript函数时,浏览器就会变得无响应。我在这里上传了这个文件:这是一张印度地图,当你点击最顶端的州(查谟和克什米尔州)时,会调用javascript函数。在一个新窗口中打开它…它可能会使您的浏览器也没有响应

你的方法有两个错误:

  • 您可以直接从ExternalInterface.call调用javascript函数

    因此,无需在javascript代码中调用eval

    调用('警报',“来自swf的警报!”)

  • 警报将阻止javascript代码的执行

  • 请尝试以下代码:

    alert(1);
    console.log(1); // execution of this line is blocked by 'alert'
    alert(2);
    console.log(2); // execution of this line is blocked by 'alert'
    
    因此,如果您评估“警报”,代码的执行将被阻止,您的浏览器可能没有响应。
    这将很容易避免。将javascript函数“evaluate”更改如下

    function evaluate(code) {
        setTimeout(function () {
            eval(code);
        }, 0);
    }
    
    settimeout只会推迟“警报”的执行,并尽快从actionscript返回回调