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

Xi *_*ang 7 javascript internet-explorer

我需要在我的页面上运行超长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>
Run Code Online (Sandbox Code Playgroud)

为了使代码有效,您必须编辑Registry,转到HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Styles,并将名为"MaxScriptStatements"的DWORD值设置为100,000.如果样式键不存在,请创建一个名为样式的新键.

谢谢,

Dio*_*ane 6

此处理限制由浏览器设置,而不是JavaScript.

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

看到这个问题:如何在密集的JavaScript处理过程中(简要地)向浏览器提供控制权?