我稍微使用hack.chat,我看到他们有一个机器人,但机器人程序对我不起作用所以我决定自己制作。
var finderBinder;
var searchFor = function(command){
finderBinder = window.find(command, true, true);
if(finderBinder){
if(command === "/hello"){
ws.send(JSON.stringify({cmd: "chat", text: "hello!"}));
}
else if(command === "/cry"){
ws.send(JSON.stringify({cmd: "chat", text: "wah waha wahhh"}));
}
else
{
console.log("it was found but it was not a command.")
}
}
else
{
console.log("Did not find the command");
}
}
var loopdeloop = 0;
while(loopdeloop === 0){
searchFor("/hello");
searchFor("/cry");
}
现在,如果我在页面上单独运行它,并输入searchFor(“/ hello”),则第一部分可以正常工作;这会起作用,但如果我希望它只是在弹出一条消息时自动执行此操作,我尝试了循环,(在一个空的聊天室,这样它就不会垃圾邮件使用过的房间,如果它确实)并且它崩溃了我的浏览器。我知道为什么会这样做。因为它只是永远检查,它永远看到它,所以它一直试图永远地做代码..
但是我怎么才能让它只在新文本出现时运行searchFor所以它会在其中运行文本,如果它是一个命令它会执行命令?或者有更好的方法吗?
答案 0 :(得分:2)
阻止你的功能从循环到无限(以及超越!)的最简单方法是每隔X秒/分钟/小时/光年就调用一次。
使用setInterval(searchFor, 1000);
,其中第二个参数是以毫秒为单位的时间间隔。
要将参数传递给searchFor
函数,您必须创建一个匿名函数,以便它不会立即被调用。
setInterval( function() { searchFor ("/hello"); }, 1000 );
这将每隔约1秒调用一次你的函数,但请记住,javascript会有一些开销,并且会有轻微的延迟。还要注意经常循环你的函数,因为它会很昂贵,并且浏览器有内置的延迟,例如,你将无法将setInterval设置为2毫秒并让它在浏览器中正常运行。
编辑:将事件绑定到文本框中的更改的更优雅的解决方案也是可能的,这取决于页面的设置方式和访问权限,如果没有已知的结构,很难回答。