javascript - 使用扩展名或其他方式在无名函数中编辑变量
问题描述
在我使用的网站中,超时会在控制台中记录某些内容并再次调用自身。例子:
(function(){
var times = 0;
var myInterval = function(){
setTimeout(()=>{
console.log("my log " + (times++));
myInterval();
}, 1000);
}
myInterval();
})();
通过使用这个无名函数,该站点使其变量无法通过控制台访问。
问题是每次重新加载页面时都需要完成这个过程,我想制作一个 UserScript 或类似的东西来自动完成这个过程。不久前,有人告诉我有一个东西可以在页面加载之前编辑脚本,我只是忘记了它的名字。
解析度:
让您在加载脚本之前编辑脚本的“东西”是资源覆盖,但我只是在一段时间后才想起,所以这次我没有使用它,而是创建了自己的用户脚本,结果如下:
在@TheBombSquad 的帮助下,我找到了一种编辑本setTimeout
机代码的方法。有了它,我可以检查函数并只停止我想要的特定函数,而不会破坏依赖于 setTimeout 的其余代码。
为此,我需要创建自己的setTimeout
函数并在该函数是我要编辑的函数时调用它:
(function(){
var times = 0;
var myInterval = function(){
setTimeout(()=>{
console.log("my log " + (times++));
myInterval();
}, 1000);
}
myInterval();
var myOtherInterval = function(){
setTimeout(()=>{
console.log("my unedited log " + (times++));
myOtherInterval();
}, 1000);
}
myOtherInterval();
})();
/* Thru my UserScript */
var mySetTimeout = (myFunction, timeOut) => {
var timer;
var currentTime = new Date().getTime();
var runFunction = () => {
if (new Date().getTime() >= currentTime + timeOut) {
clearInterval(timer);
myFunction();
}
}
timer = setInterval(runFunction, 100);
}
setTimeout = function(myFunction, timeOut){
var boole = (myFunction + "").includes('console.log("my log "');
if(!boole){ /* if its not the function that i need */
mySetTimeout(myFunction, timeOut);
} else {
var myInterval = function(){
mySetTimeout(()=>{
console.log("My edited log YEY!");
myInterval();
}, timeOut);
}
myInterval();
}
};
谢谢大家!
解决方案
我所能做的就是在我想重构setTimeout
全局函数时运行该函数
const s=setTimeout; let c=0
setTimeout=function(fn){
if(!c){window.addToTimes=fn}
}
;(function(){
var times = 0;
var myInterval = function(){
setTimeout(()=>{
console.log("my log " + (times++));
myInterval();
}, 1000);
}
myInterval();
})();
//example usage(it just runs the embedded function)
addToTimes(); addToTimes()
推荐阅读
- javascript - 使用 Mapbox 地理编码器将地址转换为坐标的未定义错误
- python - 如何安排用户注册的 API 调用?
- reactjs - 如何更改边框颜色材质-ui选择组件
- r - 如何使用 ggplot 2 制作两个图例?
- snowflake-cloud-data-platform - 流雪花表更新
- kframework - 如何使用 KRun 的 `--directory` 标志
- google-apps-script - 是否可以通过 Google Sheets API 设置图表选项?
- c++ - 如何在 C++ 中对数组进行冒泡排序?
- mongodb - 猫鼬递归嵌套
- python - 在 tensorflow 中调用 CUDA 求解器失败(cuSolverDN 调用失败,状态 =7)