一尘不染

在Internet Explorer中禁用长时间运行的脚本消息

javascript

我有一个JavaScript函数,其中包含一个for循环,该循环重复了很多次。
调用此函数后,IE浏览器将显示以下消息:

停止运行此脚本?
此页面上的脚本导致您的Web浏览器运行缓慢。如果继续运行,则您的计算机可能无响应。

我怎样才能解决这个问题?
无论如何,我可以从IE禁用此消息吗?


阅读 546

收藏
2020-05-01

共1个答案

一尘不染

当InternetExplorer达到一段JavaScript的最大同步指令数时,将显示此消息。默认最大数量为5,000,000条指令,您可以通过编辑注册表在单台计算机上增加此数量。

现在,Internet Explorer跟踪脚本引擎当前页面的已执行脚本语句总数,并在每次启动新脚本执行时重置该值,例如超时或事件处理程序。 当该值超过阈值量时,Internet Explorer将显示一个“长时间运行的脚本”对话框。

对于可能正在查看您的页面的所有用户而言,解决问题的唯一方法是分摊循环使用计时器执行的迭代次数,或重构代码以使其不需要处理那么多指令。

使用计时器打破循环相对简单:

var i=0;
(function () {
    for (; i < 6000000; i++) {
        /*
            Normal processing here
        */

        // Every 100,000 iterations, take a break
        if ( i > 0 && i % 100000 == 0) {
            // Manually increment `i` because we break
            i++;
            // Set a timer for the next iteration 
            window.setTimeout(arguments.callee);
            break;
        }
    }
})();
2020-05-01