非常にプロセス集約的なJavascriptコードがあり、「応答しないスクリプト」の警告がトリガーされています。コード化された各ステップは、コード化された順序で実行する必要があります。問題のある機能を見つけたと思いますが、警告を発せずに機能させる方法がわかりません。
ここで役立つ可能性のある兆候を見つけました(setTimeout) Javascript:応答しないスクリプトエラー ですが、これは本当にあいまいだったので、探し続けました。これははるかに優れた例ですが、コードにこれを実装する方法がわかり ません。集中的な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コアブラウザとの互換性は必要ありません。