如何修改/覆盖由无限setInterval调用的javascript函数?

时间:2012-04-18 06:46:48

标签: javascript xss intervals

假设我们有这个我无法访问的代码/我无法更改。

function f() {
// bad tasks
}
setInterval(f, 10000);

我想修改函数f,所以我在下面写了这样的东西。

window.f = function(){
// good tasks
}

但其中包含f()的原始函数bad tasks仍然每10秒运行一次。似乎传入setInterval的函数仍然指向原始函数。 我该如何阻止它?

3 个答案:

答案 0 :(得分:1)

您的假设是正确的:区间保留对原始f的引用。

如果不编辑原始脚本,则无法更改此设置。您所能做的就是清除网站上的所有间隔并开始另一个间隔。请参阅https://stackoverflow.com/a/8860203/27862

答案 1 :(得分:0)

一种方式:

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);

答案 2 :(得分:0)

请勿使用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);

See also