【问题标题】:Bypassing JavaScript long running warning dialog in IE绕过 IE 中的 JavaScript 长时间运行警告对话框
【发布时间】:2011-03-03 04:29:48
【问题描述】:

我需要在我的页面上运行超长的 JavaScript。客户抱怨 IE 显示脚本太长的警告对话框。不幸的是,我们无法减少脚本的长度,因此我正在尝试寻找绕过该问题的方法。

根据Microsoft support website

IE 跟踪执行的总数 script 语句并在每次启动新脚本执行时重置值,例如从超时或从事件处理程序开始。它显示一个 “长时间运行脚本”对话框时 该值超过了阈值。

但是,我尝试同时使用 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。如果 Styles 键不存在,请创建一个名为 Styles 的新键。

谢谢,

【问题讨论】:

  • 那里有问题吗?
  • @Marc 感谢您的快速回复。我已经先搜索了它,但我没有找到任何可行的解决方案。其实我觉得可能没有解决办法。我只是想确认一下并向我的老板报告。 ;)

标签: javascript internet-explorer


【解决方案1】:

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

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

看到这个问题:How can I give control back (briefly) to the browser during intensive JavaScript processing?

【讨论】:

  • 感谢您的回复。实际上,您的建议是我一直在尝试做的。我只是不知道为什么它不起作用。我帖子中的代码将过程分解为更小的步骤,但似乎 IE 会跟踪总语句数,而不管超时。:(
  • 是的,你所做的很有意义。我现在只能建议在重新启动进程之前增加超时时间。
  • 谢谢,这就是问题所在!将间隔从 10 增加到 100 后,脚本现在可以工作了。值得注意的是 IE 检测长脚本的方式。它会“拉”一次结果,以确定是否已经执行了太多语句。因此,有可能在没有看到警告的情况下运行更多 MaxScriptStatements。这也是我的测试脚本表现不一致的原因。
  • 这可能与 Windows 提供给 IE 的 Timer Precision 有关。它可以处理的最低时间精度是 15ms。因此 10ms 可以解释为 0 或 15 导致意外行为。 Read John Resig on this topic
【解决方案2】:

只是一些语法错误...http://jsfiddle.net/Detect/HnpCr/3/

【讨论】:

  • 谢谢,代码看起来好多了……但是它并没有解决问题。如果您将 MaxScriptStatements 设置为 100,000 并尝试在 IE 中运行脚本,您仍然会收到相同的警告。 :(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多