我想制作一个GreaseMonkey脚本。我希望在我结束的时候有一个setTimeout
,但我不知道该怎么做。
run();
function run(){
var klovas = document.getElementById("light").innerHTML;
var btn = document.getElementsByClassName("farm_icon farm_icon_a");
if(klovas < 6){
alert("Kevés egység van");
} else {
var i = 0;
while (i < btn.length){
if(typeof btn[i] != "undefined"){
btn[i].click();
}
i++;
setTimeout("run()", 3000);
}
}
}
使用此代码,问题是setTimeout
无效,并且不会像预期的那样等待3秒。
我尝试了其他方法,但没有任何效果。
修改
function run(){
var klovas = document.getElementById("light").innerHTML;
var btn = document.getElementsByClassName("farm_icon farm_icon_a");
if(klovas < 2){
alert("Kevés egység van");
} else {
var i = 0;
while (i < btn.length){
if(typeof btn[i] != "undefined"){
btn[i].click();
}
i++;
}
}
}
setInterval(run, 6000);
我试过这个。它每6秒运行一次,但我在网站上得到错误,我可以在一秒内点击超过5次。所以当我打开页面时等待6秒,然后点击,我得到错误。它没有喷射工作。 :(
答案 0 :(得分:0)
这里有一些问题。
首先,虽然setTimeout可以接受函数作为其第一个参数,但您希望将函数作为参数传递,而不是执行函数,因此您应该将"run()"
替换为run
。
其次,我不确定你为什么会复发 - 为什么setTimeout
里面有run()
?不要将其放在run函数中,而是将其放在底部,并删除顶部的run()
调用。据我所知,这个代码没有理由需要在alll上进行递归。
答案 1 :(得分:0)
如果您希望它只触发一次:
function run(){
var data = [1,2,3];
var i = 0;
while (i < data.length) {
console.log(data[i]);
i++;
}
}
setTimeout(run, 3000);
你现在写的方式,它会每3秒重复一次。
function run(){
var data = [1,2,3];
var i = 0;
while (i < data.length) {
console.log(data[i]);
i++;
}
setTimeout(run, 3000);
}
run();
但是setInterval会完成相同的结果。
function run(){
var data = [1,2,3];
var i = 0;
while (i < data.length) {
console.log(data[i]);
i++;
}
}
setInterval(run, 3000);
修改强>
用户希望看到如果从回调函数内部调用setInterval会发生什么。请注意,间隔数每3秒呈指数级增长。
setInterval使函数运行每 3秒,而setTimeout使函数在3秒内运行一次。
var numberOfIntervals = 0;
function run(){
setInterval(run, 3000);
numberOfIntervals++;
console.log(numberOfIntervals);
}
run();