我遇到过一个设计非常糟糕的网站,该网站上的大部分“动态”内容都在setTimeout
内更改。/setInterval
功能。
有一个很烦setInterval
非常快速地检查页面事件的函数,我想覆盖此函数。
我尝试清除所有 setInterval
值,一个一个地检查功能是否停止。此外,清除所有可能的 setInterval
像这样的值:for(let i = 0; i < 1000; i++) clearInterval(i);
, 停止“动态”页面呈现,我不想这样做
问题:1. 有没有办法查看interval
或 timeout
功能并清除它们?
2.有没有更好的办法?
我目前的解决方案:我正在覆盖 setInterval
和 setTimeout
在页面加载之前,记录函数 .toString()
内。
最佳答案
简短的回答是否定的,在给定 timerId 的情况下,您无法确定有关 setTimeout
/setInterval
回调的任何信息。听起来好像您无权编辑底层 Javascript 来阻止此操作。如果您可以让您的 JS 在页面中的代码之前加载,那么您可以将 setInterval
或 setTimeout
替换为您自己的代码,您可以在其中增加间隔随心所欲。例如:
let setTimeoutOld = setTimeout;
setTimeout = (cb, interval) => {
if (interval < 1000) {
interval = 1000;
}
setTimeoutOld(cb, interval);
}
现在如果页面做类似的事情:
setTimeout(() => { console.log('fired') }, 1);
至少经过 1000 毫秒后才会触发超时。如果您只想根据 cb 的内容修改特定的 setTimeout
,您可以执行您在解决方法中提到的操作:调用 .toString()
函数并将其与之前生成的一些 .toString()
(部分或完整)进行比较,然后执行您想要的任何操作。
关于javascript - 判断setinterval回调的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57519096/