Greasemonkey脚本中的setinterval()和.click()

时间:2012-08-13 08:08:44

标签: javascript click greasemonkey setinterval

我试图在javascript中开发一个简单的Greasemonkey脚本。如何在每次点击之间自动模拟点击特定按钮?

这是我的代码:

var Next=document.getElementsByClassName("SubmitButton");

for (var i=0, c = Next.length; i<c; i++)
{
    Next[i].click();
    setTimeout('Next[i].click()',3000);
}

问题是代码只点击Next的第一个值。为什么呢?

2 个答案:

答案 0 :(得分:1)

问题在于您将所有操作的超时设置为同一时间,因此它们将同时运行。

此外,您在代码中使用变量i,它将在循环完成后运行,因此它将指向数组中最后一项之后的索引。

使用闭包为每个项目创建一个单独的变量,并使用匿名函数而不是字符串来使代码在超时中执行:

var Next = document.getElementsByClassName("SubmitButton");

for (var i = 0, c = Next.length; i < c; i++) {

//Next[i].click();

  (function(element, time){

    setTimeout(function(){ element.click(); }, time);

  })(Next[i], 3000 * i);

}

答案 1 :(得分:1)

问题是:

  1. Auto-eval Strings will not work properly in Greasemonkey(在任何情况下都应该避免使用它们)。所以将函数传递给setTimeout()。这将有效; 请注意参数的处理方式

    var Next = document.getElementsByClassName ("SubmitButton");
    
    for (var i=0, c = Next.length; i<c; i++) {
        Next[i].click();
        setTimeout (function (J) {Next[J].click(); }, 3000, i);
    }
    
  2. 您似乎想要一个间隔,并用setinterval两次标记此问题。但是代码使用setTimeout,它只触发一次而不是每3秒触发一次。也许您想使用setinterval

        setinterval (function (J) {Next[J].click(); }, 3000, i);
    
  3. 这似乎是点击提交按钮。它是否正在加载新页面。或触发AJAX?如果是这样,这个方案可能只开一次或两次 链接到目标页面并更好地描述其行为。