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);
}
另一答案
问题是:
- 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); }
- 你似乎想要一个间隔,并用
setinterval
两次标记这个问题。但代码使用setTimeout
,它只发射一次而不是每3秒发射一次。也许你想用setinterval
?setinterval (function (J) {Next[J].click(); }, 3000, i);
- 这似乎是点击提交按钮。它是否正在加载新页面。或触发AJAX?如果是这样,该方案可能只开一次或两次。 链接到目标页面并更好地描述其行为。
以上是关于Greasemonkey脚本中的setinterval()和.click()[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Google Chrome 的 Greasemonkey 脚本中使用 jQuery?
从 Chrome 上的 Greasemonkey 脚本将 JS 函数注入页面