使用扩展名或其他方式编辑无名函数内的变量
Edit variable inside nameless function using extension or by other ways
在我使用的网站中,超时会在控制台中记录一些内容并再次调用自身。示例:
(function(){
var times = 0;
var myInterval = function(){
setTimeout(()=>{
console.log("my log " + (times++));
myInterval();
}, 1000);
}
myInterval();
})();
通过使用这个无名函数,站点使其变量无法通过控制台访问。
我绕过它的唯一方法是进入“源”选项卡并编辑脚本本身:
问题是每次重新加载页面时都需要执行此过程,我想制作一个 UserScript 或类似的东西来自动执行此操作。不久前,有人告诉我有一个可以在页面加载前编辑脚本的东西,我只是忘记了它的名字。
解决方案:
让你在加载脚本之前编辑脚本的“东西”是Resource Override,但我只是在一段时间后才想起,所以这次我没有使用它,而是我创建了自己的用户脚本,结果如下:
在@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()
在我使用的网站中,超时会在控制台中记录一些内容并再次调用自身。示例:
(function(){
var times = 0;
var myInterval = function(){
setTimeout(()=>{
console.log("my log " + (times++));
myInterval();
}, 1000);
}
myInterval();
})();
通过使用这个无名函数,站点使其变量无法通过控制台访问。
我绕过它的唯一方法是进入“源”选项卡并编辑脚本本身:
问题是每次重新加载页面时都需要执行此过程,我想制作一个 UserScript 或类似的东西来自动执行此操作。不久前,有人告诉我有一个可以在页面加载前编辑脚本的东西,我只是忘记了它的名字。
解决方案:
让你在加载脚本之前编辑脚本的“东西”是Resource Override,但我只是在一段时间后才想起,所以这次我没有使用它,而是我创建了自己的用户脚本,结果如下:
在@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()