Greasemonkey脚本中的setinterval()和.click()[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Greasemonkey脚本中的setinterval()和.click()[重复]相关的知识,希望对你有一定的参考价值。

我试图在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的第一个值。为什么?

答案

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

此外,您在代码中使用变量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. 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?如果是这样,该方案可能只开一次或两次。 链接到目标页面并更好地描述其行为。

以上是关于Greasemonkey脚本中的setinterval()和.click()[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Greasemonkey 中的本地存储

Greasemonkey Add On无法正常工作

如何在 Google Chrome 的 Greasemonkey 脚本中使用 jQuery?

从 Chrome 上的 Greasemonkey 脚本将 JS 函数注入页面

在 Firefox、Greasemonkey 脚本中使用时,console.log 不起作用

包括跨多个域的 Greasemonkey 脚本