你如何在浏览器中打断JS?

时间:2012-03-11 22:20:26

标签: javascript firefox google-chrome browser

在Chrome和Firefox中,在控制台中按Ctrl + C相当于什么?在实现各种算法时,我经常在Javascript中编写一些错误的(while)循环,它不会退出,会使浏览器冻结。重新加载不起作用,单击小X关闭选项卡不会做任何事情,并且在一段时间内(字面意思)我不在记忆中,系统正在交换,我要离开去喝咖啡休息时间。

4 个答案:

答案 0 :(得分:6)

在Chrome中,您可以点击Shift+ESC(或右键单击标题栏并打开Chrome任务管理器)并终止与挂起标签相关联的进程。这将适用于关闭选项卡的情况。

需要注意的是,Chrome有时会将多个标签简化为一个过程,这会终止与该过程相关的所有标签。


您可以采取的另一种避免while循环挂起浏览器的方法是编写这样的代码(您可以在测试后将其取出):

var maxIterations = 100000; 
while (foo) {
    if (!maxIterations--) throw new Error('Max iterations hit, aborting.');
    // do stuff
}

在Chrome的任务管理器中单击鼠标右键,然后选择上下文菜单底部的项目以显示奇怪的复活节彩蛋。

答案 1 :(得分:6)

JavaScript没有Ctrl + C这样的东西。执行JavaScript的浏览器通常会保护自己。如果任何JavaScript挂起,他们会抛出一个对话框,询问用户是否要停止JavaScript。

通常可以在浏览器的设置中找到超时持续时间。您可以在此处找到如何为FireFox执行此操作:http://www.trixya.net/index.php/internet/how-to-set-javascript-timeout-in-firefox

答案 2 :(得分:1)

从我对你的工作方式的深刻见解,我将如何进行:

  • 仅在按钮单击等事件上执行脚本。这会阻止脚本运行onload
  • Chrome允许您在开发者工具的“脚本”标签中的js代码中设置断点

答案 3 :(得分:0)

在浏览器中运行Javascript代码没有真正的“中断”。 ECMAscript在所谓的“UI线程”中执行,这意味着所有渲染内容都发生在ECMAscript代码执行的同一队列中。

这反过来意味着,ECMAscript中的无限循环会自动挂起整个浏览器的交互。

避免这种情况的唯一方法是编写清晰,干净的代码。如果它发生了,大多数浏览器都会意识到UI线程忙得太久,并询问用户是否要取消正在运行的javascript进程。如果您不想等待,那么您唯一的选择是终止整个浏览器/标签流程。

但是,如果您知道脚本的某些部分可能导致无限循环,则可以在某种breakpoints中手动设置developer tools,或者可以插入debugger; }关键字直接进入您的脚本。这导致javascript解释器在当前行停止并且您有机会分析下一个代码(例如条件)并且如果它看起来很糟糕则取消执行。