在浏览器控制台中执行时暂停 Javascript

Posted

技术标签:

【中文标题】在浏览器控制台中执行时暂停 Javascript【英文标题】:Pause Javascript when executing it in browser console 【发布时间】:2019-04-23 01:03:57 【问题描述】:

我需要在 Chrome 的控制台中执行 javascript,但有一些延迟。如何做到这一点?

我需要这个的原因是,一旦焦点从网页(或网页的某个元素)发生变化,它就会重新绘制。因此,我想启动我在控制台中执行的脚本,延迟几秒钟,这样我就可以将焦点更改为我正在使用的页面上的正确元素。

编辑 1:Dinesh Padiyan。

不适合我,截图:

【问题讨论】:

你最好使用调试器来遍历代码。 您是否尝试过将debugger; 语句放在要强制执行暂停的位置?在此处查看更多信息:w3schools.com/jsreF/jsref_debugger.asp 我认为debugger; 会阻止所有javascript被执行。 你需要使用双引号。我已经相应地编辑了我的答案。 该行应该是console.log("I won't execute until you say so"); 【参考方案1】:

如果出于调试目的需要延迟,则需要在代码中添加debugger; 语句。当您添加调试器并打开开发人员工具时,脚本执行将在您的 debugger; 语句处暂停,您可以在开发人员工具中检查您的代码。

console.log('I will execute');
debugger; // execution will pause at this line
console.log("I won't execute until you say so");

如果您需要延迟执行您的网站行为,您可以使用setTimeout() 来延迟调用。

console.log('I will be printed immediately');
setTimeout(function() 
  console.log('I will be printed after 5s');
, 5000); // 5s delay

【讨论】:

【参考方案2】:

您可以像这样扩展console 对象,然后使用自定义logLater 方法。

console.logLater = (message, delay) => setTimeout(function() 
  console.log(message);
, delay);

console.log('I will be printed immediately');

console.logLater('I will be printed after 3 seconds', 3000);

【讨论】:

如何将您的示例与document.activeElement 之类的内容一起使用?【参考方案3】:
function delay (ms)   return new Promise(resolve => setTimeout(resolve, s));  

“异步”工作演示: http://zarsoft.info/software/_Test/pause_javascript/index.html

【讨论】:

以上是关于在浏览器控制台中执行时暂停 Javascript的主要内容,如果未能解决你的问题,请参考以下文章

在浏览器的开发工具中暂停语句时,如何在该语句之后立即终止执行?

前端异步编程解决方案实践

在调试模式下执行控制台应用程序后,如何让 Visual Studio 暂停?

C#在切换UserControls时暂停视频或停止Web浏览器

不可见时暂停动画的正确方法

JS 倒计时问题,手机网页后台运行时,js会暂停