Greasemonkey延迟... setTimeout不能正常工作

时间:2011-05-23 21:03:28

标签: javascript loops greasemonkey settimeout

我一直在玩一个网站,我想在i秒内每隔interval次点击一次按钮。

我的代码是:

clickbidBtn1 = function() {
    var bidBtn=document.getElementById("BidButton");

    var interval = 15000;
    for (var i=3; i>=0; i--){
    setTimeout(bidBtn.click(1);,i*interval);
};

我发现GM会同时执行所有i次点击,而非预期的延迟。有没有办法延迟点击时间?假设我希望该功能每15秒点击一次按钮i次。

我想给它一些更多的变量,并在settimeout代码部分添加一个变量,它只执行@ click,然后将增加的变量与当前变量进行比较,然后再转到下一个{{1} ......但是还没有考虑过......对于一个简单的过程来说似乎是一个复杂的过程...... :(我会玩弄它一点

2 个答案:

答案 0 :(得分:1)

请使用setInterval()

一种方式:

var bidClickTimer       = 0;
var numBidClicks        = 0;

function clickbidBtn1 ()
{
    var interval        = 15000;
    bidClickTimer       = setInterval (function() {BidClick (); }, interval);
}

function BidClick ()
{
    numBidClicks++;
    if (numBidClicks > 3)
    {
        clearInterval (bidClickTimer);
        bidClickTimer   = "";
    }
    else
    {
        bidBtn.click (1);
    }
}

clickbidBtn1 ();

或者,不使用全局变量:

function clickbidBtn1 ()
{
    var interval            = 15000;
    this.numBidClicks       = 0;
    this.bidClickTimer      = 0;
    this.BidClick           = function () {
                                numBidClicks++;
                                if (numBidClicks > 3)
                                {
                                    clearInterval (bidClickTimer);
                                    bidClickTimer   = "";
                                }
                                else
                                {
                                    bidBtn.click (1);
                                }
                            };
    this.bidClickTimer      = setInterval (function(thisScope) {thisScope.BidClick (); }, interval, this);
}

clickbidBtn1 ();

答案 1 :(得分:0)

只是为了解释为什么您的代码不起作用:您调用 .click方法立即(在函数名称调用后放置()函数)并实际将该函数的返回值传递给setTimeoutfor循环非常快,以至于一切似乎都在同一时间发生。

您必须将功能参考传递给setTimeout,例如一个匿名函数:

setTimeout(function() {
    bidBtn.click(1);
}, i*interval);