JavaScript - 是否可以查看所有当前计划的超时?

aro*_*oth 32 javascript

所以我想知道,在JavaScript中是否有任何可行的方法来查看有关您未明确了解的预定超时和间隔的信息(我知道setTimeoutsetInterval返回一个可用于引用已调度实例的句柄,但请说明这一点由于某种原因无法使用)?例如,有没有办法使用像Chrome的JavaScript控制台这样的工具来确定任意页面上当前处于活动状态的超时,什么时候它们将会触发,以及在它们触发时将执行哪些代码?更具体地说,一个页面刚刚执行了以下JavaScript:

setTimeout("alert('test');", 30000);
Run Code Online (Sandbox Code Playgroud)

是否有一些我可以执行的代码告诉我浏览器将在alert('test');30秒后执行?

似乎理论上应该有某种方式来获取这些信息,因为如果你知道在哪里看,JavaScript中的所有内容都会被公开为可公开访问的属性,但是我不记得曾经做过这样的事情或者看过它由别人.

sha*_*nny 12

如何简单地重写setTimeout函数来排序注入自定义日志记录功能?

喜欢

var oldTimeout = setTimeout;
window.setTimeout = function(callback, timeout) {
  console.log("timeout started");
  return oldTimeout(function() {
    console.log('timeout finished');
    callback();
  }, timeout);
}
Run Code Online (Sandbox Code Playgroud)

可能有用?

  • 您希望确保返回旧的超时功能,以便获得timeoutID (3认同)
  • 是的,这不是一个糟糕的选择.但它不会提供查看已安排的超时信息的方法. (2认同)
  • 好吧,如果你能确保这个脚本是第一个运行的,例如把它放在所有其他脚本的顶部,那么这应该可以工作,除非你想侵入一些浏览器内部超时或其他任何:D (2认同)
  • 虽然如果它首先运行的话这会起作用......但它确实没有回答问题 (2认同)

Gar*_*eth 5

不,即使HTML5规范(这是当前浏览器中HTML 4.01行为的合理化,具有附加功能)也没有指定列出可用回调的方法.

  • 是的,但规范似乎确实说超时必须有一个相应的`Task`,它必须放在当前`Event-Loop`的`Queue`里面,并且"排队到任务队列的每个任务本规范定义的事件循环与"Document"相关联.因此,尽管如何实现这一点以及事物应该存在的具体细节尚未明确,如果"文档"可以通过JavaScript访问,那么似乎遵循"任务"应该也是因为它的"关联"用`Document`.虽然也许我解释错了? (8认同)