如何修改/覆盖由无限setInterval调用的javascript函数?
假设我们有我无权访问/无法更改的代码如何修改/覆盖由无限setInterval调用的javascript函数?,javascript,xss,intervals,Javascript,Xss,Intervals,假设我们有我无权访问/无法更改的代码 function f() { // bad tasks } setInterval(f, 10000); 我想修改函数f,所以我在下面写了类似的东西 window.f = function(){ // good tasks } 但是包含错误任务的原始函数f()仍然每10秒运行一次。似乎传入setInterval的函数仍然指向原始函数。 如何停止它?单向: function f() { //bad tasks } setInterval(func
function f() {
// bad tasks
}
setInterval(f, 10000);
我想修改函数f,所以我在下面写了类似的东西
window.f = function(){
// good tasks
}
但是包含错误任务的原始函数f()
仍然每10秒运行一次。似乎传入setInterval
的函数仍然指向原始函数。
如何停止它?单向:
function f() {
//bad tasks
}
setInterval(function() { f(); }, 10000);
window.f = function() {
//good tasks
}
因此,计时器不会调用传递给它的旧f(),而是此时调用名为f的函数
其他方式:
function f() {
//bad tasks
}
var interval = setInterval(f, 10000);
function g() {
//good tasks
}
clearInterval(interval);
setInterval(g, 10000);
您的假设是正确的:间隔保留对原始f
的引用
在不编辑原始脚本的情况下,无法更改此设置。您所能做的就是清除站点上的所有间隔,然后开始另一个间隔。请参阅。不要使用setInterval
,而是使用setTimeout
。它会给你所需要的控制
function f() {
// bad tasks
fTimeout = setTimeout(f,1000);
}
//start
var fTimeout = setTimeout(f,1000);
现在,如果发生了不好的事情,您想重写f
:
clearTimeout(fTimeout);
window.f = function() {
/* good stuff */
fTimeout = setTimeout(f,1000);
}
fTimeout = setTimeout(f,1000);
看到这个问题,我认为Noob无法更改setInterval
部分。您的第一种方法不起作用(已测试)。第二种方法不适用于Noob,因为我无权访问的代码/I无法更改,并且Noob无法清除旧的间隔。@AndrewD。如果Noob愿意清除所有当前的间隔,他可以终止有问题的间隔(只需从0循环到下一个间隔id,从setInterval
并清除每个间隔;)@AndrewD。你能告诉我你是怎么测试的吗?它对我的配置有效:。正如Yoshi所解释的那样,它对Noob没有帮助,但它仍然应该工作。@penartur,我想说的是,setInterval(function(){f();},10000),
并没有取代原来的“setInterval(f,10000);”无法帮助。您确定定义了哪些代码错误的函数:function f(){}
,而不是var f=function(){}
?