首页 > 解决方案 > 确定 setinterval 回调的内容

问题描述

我遇到过一个设计很糟糕的网站,网站上的大部分“动态”内容都在setTimeout/setInterval函数内进行了更改。

有一个非常烦人的setInterval功能可以非常快速地检查页面活动,我想覆盖这个功能。

我尝试的是清除所有setInterval值,一一检查函数是否停止。此外,清除所有可能的setInterval值,如:for(let i = 0; i < 1000; i++) clearInterval(i);,停止“动态”页面呈现,我不想这样做

问题:1.有什么办法可以查看intervalortimeout函数并清除它们?2.有没有更好的方法?

我当前的解决方案:我在页面加载之前覆盖了setIntervaland ,并在其中记录了函数。setTimeout.toString()

标签: javascriptsetinterval

解决方案


简短的回答是否定的,给定 timerId ,您无法确定有关setTimeout/回调的任何信息。setInterval听起来好像您无权编辑底层 Javascript 来阻止此操作。如果您可以让您的 JS 在页面中的代码之前加载,那么您可以做的是替换setIntervalsetTimeout使用您自己的代码,您可以将间隔增加到您想要的任何内容。例如:

let setTimeoutOld = setTimeout;
setTimeout = (cb, interval) => {
    if (interval < 1000) {
        interval = 1000;
    }
    setTimeoutOld(cb, interval);
}

现在,如果页面执行以下操作:

setTimeout(() => { console.log('fired') }, 1);

直到至少 1000 毫秒过去,超时才会触发。如果您只想setTimeout根据 cb 的内容修改特定内容,则可以执行您在解决方法中提到的操作:调用.toString()该函数并将其与之前生成的一些.toString()(部分或完整)进行比较,然后做任何您想做的事情.


推荐阅读