我有一些非常密集的 Javascript 代码,它触发了“无响应脚本”警告。每个编码步骤都必须按照它们编码的顺序发生。我想我已经找到了有问题的功能,但我不明白如何在不触发警告的情况下使其工作。
我在这里发现了一些可能有帮助的迹象 (setTimeout) Javascript: Unresponsive script error 但这真的很模糊,所以我一直在寻找。这是一个更好的例子,但我看不到在我的代码中实现这一点的方法。 在密集的 JavaScript 处理过程中,如何将控制权(简单地)交还给浏览器? 原始文章 http://www.julienlecomte.net/blog/2007/10/28/ 是所有帐户的天才,但我似乎无法在这里实施。
这是我认为导致拟合的代码。
// -----------------------------------
// Output stats for all nations
// by continent in a colon delimited
// list further delimited by a ~
// ( ContinentName:NationPower:NationHTML )
// expects the output from the
// continent_stats function
// -----------------------------------
function Nations(ContinentData) {
document.write("<tr><th>Nation Stats</th></tr><tr>"); // setup progress bar
var NationString = ""; // init the string
var Carray = ContinentData.split("*"); //continents
for (cit = 0; cit < Carray.length; cit++) { // go through the continents
var Cstat = Carray[cit].split(":"); // make an array of the individual continent stats
var NumberOfNations = Cstat[4]; // nation #
var ContinentName1 = Cstat[0]; // Continent Name
document.write("<td class='ProgressBarText'>" + ContinentName1 + "</td><td class='ProgressBars'>"); // Format loader screen text
for (nnum = 0; nnum < NumberOfNations; nnum++) { // go through the number of nations on the continent
var nat1 = BuildCulture(); // build the nation
var Natname= "Nation"+padLeft(nnum,2,"0"); // name the nation
NationString = NationString + ContinentName1 + ":" + Natname + ":" + nat1 + "~"; // build the string
document.write("█"); // add to progress bar
}
document.write("</td><td>"+NumberOfNations+ " Nations</td></tr>"); // progress bar complete
}
document.write("</table>"); // end the loader screen table
// send the nation string back
return NationString;
}
所以你可以看到它在大陆之间循环并为每个大陆创建国家。BuildCulture() 函数是罪魁祸首。它本身工作得很好,但在大约 4 个大陆的过程中将 8 或 9 串在一起,警告就会消失。
我试过使用
setTimeout( function() { BuildCulture(); }, 1000);
到处都是,在主代码部分,在 BuildCulture() 函数开始和结束,在 Nations(ContinentData) 函数中进出循环。它永远不会起作用。
我显然循环太多,但我需要每个循环。SetTimeout 会完全帮助我还是我在追逐错误的陈述?
如果 SetTimeout 是我的解决方案目标,我该如何在这段代码中实现它?
非常感谢。
PS 我的目标只是让它在 Firefox 中工作,因此不需要与 IE 核心浏览器兼容。