我需要在我的网页上运行超长JavaScript。客户端抱怨IE显示脚本太长的警告对话框。不幸的是,我们无法减少脚本的长度,所以我试图找到问题的旁路。
IE跟踪已执行的总数 脚本语句,并在每次启动新脚本时重置该值,例如从超时或事件处理程序。它显示一个 “长时间运行脚本”对话框的时候 该值超过阈值金额。
但是我尝试使用setInterval()和setTimeout()将我的脚本分成几部分,但没有一个正常工作。我使用的浏览器是IE8。我的代码如下:
<html>
<head>
<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.5.1.min.js"></script>
</head>
<body>
<div id ="test"></div>
<div id ="log"></div>
</body>
<script>
var repeat =0;
function heavyTask(){
if (repeat<50){
y = longRun();
setTimeout("heavyTask()",100);
}else{
$('#test').html("done!");
}
}
function longRun(){
for(var i =0; i<20000;i++){ }
repeat++;
$('#log').append('<div>repeat: '+ repeat +'</div>');
};
$(document).ready(function () {
setTimeout("heavyTask()",100);
});
</script></html>
为了使代码工作,你必须编辑注册表,转到 HKEY_CURRENT_USER \ Software \ Microsoft \ Internet Explorer \ Styles,并将名为“MaxScriptStatements”的DWORD值设置为100,000。如果样式键不存在,请创建一个名为样式的新键。
谢谢,
答案 0 :(得分:6)
此处理限制由浏览器设置,而不是JavaScript。
您可以将过程分解为更小的步骤。
请参阅此问题:How can I give control back (briefly) to the browser during intensive JavaScript processing?
答案 1 :(得分:1)
只是一些语法错误...... http://jsfiddle.net/Detect/HnpCr/3/