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

时间:2011-03-02 20:18:08

标签: javascript internet-explorer

我需要在我的网页上运行超长JavaScript。客户端抱怨IE显示脚本太长的警告对话框。不幸的是,我们无法减少脚本的长度,所以我试图找到问题的旁路。

根据Microsoft support website

  

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。如果样式键不存在,请创建一个名为样式的新键。

谢谢,

2 个答案:

答案 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/