如何在浏览器中中断JS
How do you interrupt JS in browser?
对于Chrome和Firefox来说,在控制台中按下Ctrl+C的等价物是什么?在实现各种算法时,我经常在Javascript中编写一些bug(while
)循环,它不会退出,会使浏览器冻结。重新加载不起作用,点击小X关闭标签也没有任何作用,过了一段时间(实际上)我就没有内存了,系统正在交换,我要去喝咖啡休息。
在Chrome中,您可以点击Shift+ESC
(或右键单击标题栏并打开Chrome任务管理器)并终止与挂起的选项卡相关的进程。在无法关闭选项卡的情况下,这将起作用。
需要注意的是,有时Chrome会将几个选项卡简化为一个进程,这会杀死与该进程相关的所有选项卡。
避免while
循环挂起浏览器的另一种方法是编写这样的代码(测试后可以取出):
var maxIterations = 100000;
while (foo) {
if (!maxIterations--) throw new Error('Max iterations hit, aborting.');
// do stuff
}
右键单击Chrome的任务管理器,然后选择上下文菜单底部的项目,显示一个奇怪的复活节彩蛋
JavaScript没有Ctrl + C
这样的东西。执行JavaScript的浏览器通常是保护自己的。如果任何JavaScript挂起,他们会抛出一个对话框,询问用户是否想停止JavaScript。
超时持续时间通常可以在浏览器的设置中找到。你可以在这里找到如何为FireFox做到这一点:http://kb.mozillazine.org/Dom.max_script_run_time
根据我对您工作方式的一点了解,我将如何进行:
- 只在类似事件的按钮单击时执行脚本。这将阻止脚本运行
onload
- Chrome允许您在开发人员工具的脚本选项卡中设置
js
代码的断点
在浏览器中运行Javascript代码没有真正的"中断器"。ECMAscript在所谓的"UI线程"中执行,这意味着所有呈现内容都发生在执行ECMAsscript代码的同一队列中。
这反过来意味着,ECMAscript中的一个无限循环会自动挂起整个浏览器交互。
避免这种情况的唯一方法是编写清晰、干净的代码。如果发生这种情况,大多数浏览器都会意识到UI线程太忙太久,并询问用户是否要取消正在运行的javascript进程。如果你不想等待,你唯一的选择就是终止整个浏览器/选项卡过程。
但是,如果您知道脚本的某些部分可能会导致无限循环,则可以在某种developer tools
中手动设置breakpoints
,也可以将debugger;
关键字直接插入到脚本中。这会导致javascript解释器停在当前行,并且您有机会分析下一个代码(例如while conditions),如果它看起来不好,则取消执行。
- 即使被信号处理程序中断,node.js代码也会一直运行到完成吗
- 下划线.js .map 方法会中断 IE8
- 当在外部js中时,Highcharts条形图中断
- Three.js中的文本覆盖会中断拖动
- Node.js中的中断繁忙循环
- JS在用户输入单引号时中断
- 带斜杠-中断路由的节点JS路由参数
- 清除文本区域会中断其他JS函数
- 如何在返回值(Js)时不中断函数/循环
- webpack`this`没有指向窗口(Chart.js中断)
- Ember js - 更新其他表后,有许多关系中断
- Chrome WebRTC在浏览器更新时中断适配器.js
- 这个 js 在没有 url 前缀的情况下中断有什么原因吗:www
- 高图表.js添加鼠标悬停功能或悬停状态(实现中断图表?
- 中断 iframe 中的 JS
- 启用最后一个 JS 函数时动态下拉窗体中断
- 我的 JS 对象迭代在添加新属性时中断
- JS,在数组中添加新输入,如果达到 10,则希望“中断”
- 整页.js - 设置响应宽度和滚动溢出在移动设备上中断页面
- 如何在浏览器中中断JS