如果我在代码中犯了错误,导致javascript中出现无限循环,并且它一直在调用alert(),有没有办法停止循环?

如果我在代码中犯了错误,导致javascript中出现无限循环,并且它一直在调用alert(),有没有办法停止循环?,javascript,firefox,alert,Javascript,Firefox,Alert,有时,我使用调试代码来警告javascript中的某些内容(例如,匹配正则表达式中的某些内容),但忘记了一个修饰符,并且警告位于无限循环中(或者如果循环匹配模式300次)。如果使用Firefox,警报会不断出现,甚至无法关闭选项卡、窗口或应用程序 如果我强制退出,它将关闭Firefox的所有选项卡,甚至其他窗口。。。实际上有没有更优雅地停止循环的方法?简单的回答是:没有 这是使用Firebug和console.log函数的一个很好的理由。具有讽刺意味的是,在某些情况下,这将导致“停止脚本,因为它

有时,我使用调试代码来警告javascript中的某些内容(例如,匹配正则表达式中的某些内容),但忘记了一个修饰符,并且警告位于无限循环中(或者如果循环匹配模式300次)。如果使用Firefox,警报会不断出现,甚至无法关闭选项卡、窗口或应用程序


如果我强制退出,它将关闭Firefox的所有选项卡,甚至其他窗口。。。实际上有没有更优雅地停止循环的方法?

简单的回答是:没有

这是使用Firebug和console.log函数的一个很好的理由。具有讽刺意味的是,在某些情况下,这将导致“停止脚本,因为它正在运行”对话框不显示,这意味着您回到了现在的位置

Chrome和Opera都有这个功能。IE没有,苹果Safari也没有

不是本机解决方案,但您可以尝试以下脚本:

此外,您可以简单地覆盖警报功能,以使用确认对话框,并在取消确认时停止显示警报:

var displayAlerts = true;
然后:

function alert(msg) {
  if (displayAlerts) {
     if (!confirm(msg)) {
       displayAlerts = false;           
     }
  }
}

Google Chrome允许您阻止显示其他警报。

不行。好消息是,虽然大多数浏览器都有无限递归保护,但这不是主题。

我已经编写了一个Firefox扩展来解决这个问题


安装Greasemonkey并转到本页:


为greasemonkey安装此脚本后,任何警报对话框窗口都会有一个取消按钮,用于停止javascript。

看起来您可以在firefox中:

  • 按住Ctrl键
  • 保持进入
  • 按F4键一次

  • 根据这篇博文,它并非在所有情况下都有效,更多信息如下:

    [在IE 11上测试]如果您需要关闭web浏览器,并且不想出于任何原因按住alt del键(在我的例子中,我的坏javascript无限警报循环是在citrix上运行的,它会在从缓存中执行ctrl-alt-del后自动重新加载我的上一个会话,我无法清除该会话)

    您可以按住alt-F4键并滥发X(关闭浏览器窗口),从而找到解决方法

    这非常快…alt-F4非常快地关闭警报框,您会注意到浏览器顶部的X按钮闪烁。这为您提供了非常小的时间窗口,您可以在警报之间关闭它


    注意:如果您打开了多个选项卡,您需要首先从屏幕底部控制栏上的图标关闭它们,因为“关闭所有选项卡消息”会产生干扰。

    是,Opera有一个“停止执行此页面中的脚本”警告窗口底部的复选框这不再是真的,请参见下面Alex Key的回答。您可能会认为这对所有浏览器来说都是一个明显的功能。浏览器没有这个功能总是让我感到惊讶。感谢上帝,chrome引入了它。因为您没有问如何更改代码,所以这真的属于超级用户。这是一个意外经典的永无止境的警报恶作剧网站的立场。顺便说一句。我建议使用console.log,但如果你已经进入了警报()循环(就像我刚才一样,这是一个很好的逃避)。很好-人们仍然应该使用console;),但这是更多的观点,本着这个古老问题的精神,我已经对你的答案投了赞成票。完全同意@altCognito(+1); 控制台在99.99%的情况下是最佳选择。我发现,在某些浏览器中,alert()很方便的一种情况是在第三方代码中的窗口关闭之前捕获变量。e、 g.调试第三方电子学习课件时,通常在窗口关闭时启动操作。Firebug会在窗口关闭后保留控制台输出,但其他浏览器不会。实际上您不需要使用“回车”,只需按住ctrl+f4键就足够了。老问题,老答案。但是仍然可以避免我结束所有打开的chrome任务:)顺便说一句,它只按照描述的顺序工作,这意味着,输入是必不可少的!