Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
绕过IE中的JavaScript长时间运行警告对话框_Javascript_Internet Explorer - Fatal编程技术网

绕过IE中的JavaScript长时间运行警告对话框

绕过IE中的JavaScript长时间运行警告对话框,javascript,internet-explorer,Javascript,Internet Explorer,我需要在我的页面上运行超长JavaScript。客户端抱怨IE显示了脚本过长的警告对话框。不幸的是,我们无法缩短脚本的长度,因此我试图找到解决该问题的方法 根据: IE跟踪执行的任务总数 脚本语句,并在每次启动新脚本执行时(例如从超时或事件处理程序)重置值。它显示一个 出现“长时间运行脚本”对话框时 该值超过阈值 然而,我尝试使用setInterval()和setTimeout()将我的脚本分解为多个部分,但都没有成功。我使用的浏览器是IE8。我的代码如下: <html> <h

我需要在我的页面上运行超长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>

var-repeat=0;
函数重任务(){

如果(重复此处理限制是由浏览器而不是JavaScript设置的

您可以将流程分解为更小的步骤


看到这个问题:

只是一些语法错误…

有什么问题吗?@Marc谢谢你的快速回答。我先搜索了一下,但没有找到任何可行的解决方案。事实上,我想可能没有解决方案。我只是想确定一下,然后向我的老板报告。;)谢谢你的回复。事实上,你的建议正是我一直想做的。我只是不知道为什么它不起作用。我帖子中的代码将过程分解为几个小步骤,但IE似乎会跟踪语句的总数,而不管是否超时(是的,你所做的是有意义的。我现在只能建议在重新启动进程之前增加超时。谢谢你,这就是问题所在!将间隔从10增加到100后,脚本现在可以工作了。值得注意的是IE检测长脚本的方式。它“拉”每隔一段时间检查一次结果,以确定是否已经执行了太多的语句。因此,可能会在没有看到警告的情况下运行更多的MaxScriptStatements。这也是我的测试脚本行为不一致的原因。这可能与Windows提供给IE的计时器精度有关。它可以达到的最低时间精度句柄为15ms。因此10ms可能被解释为0或15,从而导致意外行为。谢谢,代码看起来好多了…但是它并不能解决问题。如果您将MaxScriptStatements设置为100000,并尝试在IE中运行脚本,您仍然会收到相同的警告:(