javascript - 确定 setinterval 回调的内容
问题描述
我遇到过一个设计很糟糕的网站,网站上的大部分“动态”内容都在setTimeout
/setInterval
函数内进行了更改。
有一个非常烦人的setInterval
功能可以非常快速地检查页面活动,我想覆盖这个功能。
我尝试的是清除所有setInterval
值,一一检查函数是否停止。此外,清除所有可能的setInterval
值,如:for(let i = 0; i < 1000; i++) clearInterval(i);
,停止“动态”页面呈现,我不想这样做
问题:1.有什么办法可以查看interval
ortimeout
函数并清除它们?2.有没有更好的方法?
我当前的解决方案:我在页面加载之前覆盖了setInterval
and ,并在其中记录了函数。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 毫秒过去,超时才会触发。如果您只想setTimeout
根据 cb 的内容修改特定内容,则可以执行您在解决方法中提到的操作:调用.toString()
该函数并将其与之前生成的一些.toString()
(部分或完整)进行比较,然后做任何您想做的事情.
推荐阅读
- python-3.x - 创建自定义“测试”命令以运行 Flask 应用程序的测试套件
- .net - File.Exists 仅对文件名返回 true
- microsoft-graph-api - Microsoft Graph 消息 api 中频繁出现 504 网关超时错误
- bash - While Read Line - 限制行数
- javascript - 双击img元素触发点击事件时javascript出错
- c# - 将 HttpRequestContext 中的用户凭据注入服务层
- continuous-integration - 如何在 GitHub 中连接 Coveralls 和 Circle CI?
- python - 请在试运行时澄清我的错误
- bash - 如何使用带有字符串的 AWK 作为 RS?
- excel - 如何使用 Excel/VBA 提取 Expedia 航班页面上的面包屑数据