阻止“停止执行此脚本”消息

Block "stop execution of this script" message

本文关键字:脚本 消息 执行 阻止      更新时间:2023-09-26

我有一个包含 2000 个数组的数组,每个数组在 HTA 的 javascript 中有 2000 个值(用于存储 2000x2000 的图像)。我有这段代码来测试数组中有多少个"blue"值(数组的名称是 image):

var bluePixels = 0;
for(i = 0; i < image.length; i++){
     for(j = 0; j < image[i].length; j++){
          if(image[i][j] == "blue"){bluePixels = bluePixels + 1}
     }
}
alert(bluePixels);

问题是它会显示一条消息,其中说"停止执行此脚本?此页面上的脚本正在减慢 Internet Explorer 的速度。如果继续,您的计算机可能无法应答。(我不确定确切的单词,因为我的电脑是法语的),然后,如果我单击"否",它会像它应该的那样执行alert(bluePixels),但如果我按"是",它就不会。如何阻止此消息?(我知道有一些解决方法,例如在开始时告诉用户按"否",但我想要一个真正的解决方案)

对于 IE 版本 4 到 8,您可以在注册表中执行此操作。在注册表编辑器中打开以下项:HKEY_CURRENT_USER'Software'Microsoft'Internet Explorer'Styles 。如果此密钥不存在,请创建它。在此键中,创建一个名为 MaxScriptStatements 的 DWORD 值,并为其指定值0xFFFFFFFF(不要担心单击"确定"时值是否自动更改,这是正常的)。

你可以对 JavaScript 进行编程,使其自动执行此操作:

var ws = new ActiveXObject("WScript.Shell");
ws.RegWrite("HKEY_CURRENT_USER''Software''Microsoft''Internet Explorer''Styles''","");
ws.RegWrite("HKEY_CURRENT_USER''Software''Microsoft''Internet Explorer''Styles''MaxScriptStatements",1107296255,"REG_DWORD");

似乎你在这里有一个答案

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

因此,第一种方法可以通过每次此类大型迭代的超时来实现。

您需要将 2000x2000 for 循环拆分为较小的代码段,例如线程或进程,因此浏览器的最大执行时间不会耗尽。在这里,图像数组一次解析一行,由计时器控制:

var bluePixels = 0,
    timer,
    i = 0;
function countBluePixels() {
    for (var j = 0; j < image[i].length; j++){
        if (image[i][j] == "blue") {
            bluePixels = bluePixels + 1;
        }
    }
    i=i+1;
    if (i>image.length) {
        clearInterval(timer);
        alert(bluePixels);
    }
}
timer = window.setInterval(countBluePixels, 0);

代码是相同的,只是在 2000 个进程中拆分而不是 1。