Javascript 查找剩余的设置超时和设置间隔
有没有办法查看当前正在运行的超时和/或使用setTimeout或setInterval创建的间隔 既然每个都返回一个ID,那么有没有办法在开发人员控制台中查看当前的ID?这将帮助我发现应用程序中的“漏洞” 我现在唯一能想到的方法是为我的setInterval/setTimeout调用创建一个包装器。或者重写窗口中的内置项(即Javascript 查找剩余的设置超时和设置间隔,javascript,google-chrome,firebug,google-chrome-devtools,Javascript,Google Chrome,Firebug,Google Chrome Devtools,有没有办法查看当前正在运行的超时和/或使用setTimeout或setInterval创建的间隔 既然每个都返回一个ID,那么有没有办法在开发人员控制台中查看当前的ID?这将帮助我发现应用程序中的“漏洞” 我现在唯一能想到的方法是为我的setInterval/setTimeout调用创建一个包装器。或者重写窗口中的内置项(即window.setTimeout=function()),然后让对象映射跟踪。基于 for(变量i=1;i
window.setTimeout=function()
),然后让对象映射跟踪。基于
for(变量i=1;i<99999;i++){
窗口。清除间隔(i);
窗口清除超时(i);
}
希望这有帮助 我刚刚为您编写的这段代码(有趣的练习)覆盖了
setTimeout
和cleartimout
函数,并创建了一个函数,用于跟踪在名为timeout
的全局变量中哪些超时可用。在JSFIDLE上试用:
您可以轻松地将其调整为setInterval
和clearInterval
不过我想说的是,您可能需要跟踪超时,以避免应用程序中出现奇怪的行为…@K2xL:是的,根据这里给出的链接,您可能可以尝试覆盖setTimeout/setInterval,然后用一行#
触发错误(新错误).lineNumber
如果运行时间太长,我认为查找setTimeout/Interval导致的“泄漏”的更好方法是在JS堆快照的单独部分中显示它们,而不是在开发人员控制台中提供它们的列表。
for (var i = 1; i < 99999; i++){
window.clearInterval(i);
window.clearTimeout(i);
}
(function() {
window.timeouts = [];
var _setTimeout = window.setTimeout;
window.setTimeout = function() {
var id = _setTimeout.apply( this, arguments );
timeouts.push( id );
_setTimeout( function() {
timeouts.splice( timeouts.indexOf( id ), 1);
}, arguments[1] );
return id;
};
var _clearTimeout = window.clearTimeout;
window.clearTimeout = function( id ) {
_clearTimeout( id );
timeouts.splice( timeouts.indexOf( id ), 1);
};
})();