绕过IE中的JavaScript长时间运行警告对话框
我需要在我的页面上运行超长JavaScript。客户端抱怨IE显示了脚本过长的警告对话框。不幸的是,我们无法缩短脚本的长度,因此我试图找到解决该问题的方法 根据: IE跟踪执行的任务总数 脚本语句,并在每次启动新脚本执行时(例如从超时或事件处理程序)重置值。它显示一个 出现“长时间运行脚本”对话框时 该值超过阈值 然而,我尝试使用setInterval()和setTimeout()将我的脚本分解为多个部分,但都没有成功。我使用的浏览器是IE8。我的代码如下:绕过IE中的JavaScript长时间运行警告对话框,javascript,internet-explorer,Javascript,Internet Explorer,我需要在我的页面上运行超长JavaScript。客户端抱怨IE显示了脚本过长的警告对话框。不幸的是,我们无法缩短脚本的长度,因此我试图找到解决该问题的方法 根据: IE跟踪执行的任务总数 脚本语句,并在每次启动新脚本执行时(例如从超时或事件处理程序)重置值。它显示一个 出现“长时间运行脚本”对话框时 该值超过阈值 然而,我尝试使用setInterval()和setTimeout()将我的脚本分解为多个部分,但都没有成功。我使用的浏览器是IE8。我的代码如下: <html> <h
<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>
var-repeat=0;
函数重任务(){
如果(重复此处理限制是由浏览器而不是JavaScript设置的
您可以将流程分解为更小的步骤
看到这个问题:只是一些语法错误…有什么问题吗?@Marc谢谢你的快速回答。我先搜索了一下,但没有找到任何可行的解决方案。事实上,我想可能没有解决方案。我只是想确定一下,然后向我的老板报告。;)谢谢你的回复。事实上,你的建议正是我一直想做的。我只是不知道为什么它不起作用。我帖子中的代码将过程分解为几个小步骤,但IE似乎会跟踪语句的总数,而不管是否超时(是的,你所做的是有意义的。我现在只能建议在重新启动进程之前增加超时。谢谢你,这就是问题所在!将间隔从10增加到100后,脚本现在可以工作了。值得注意的是IE检测长脚本的方式。它“拉”每隔一段时间检查一次结果,以确定是否已经执行了太多的语句。因此,可能会在没有看到警告的情况下运行更多的MaxScriptStatements。这也是我的测试脚本行为不一致的原因。这可能与Windows提供给IE的计时器精度有关。它可以达到的最低时间精度句柄为15ms。因此10ms可能被解释为0或15,从而导致意外行为。谢谢,代码看起来好多了…但是它并不能解决问题。如果您将MaxScriptStatements设置为100000,并尝试在IE中运行脚本,您仍然会收到相同的警告:(