我稍微使用了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,以便它将在其中运行文本,如果是命令,它将执行该命令?还是有更好的方法来做到这一点?
最佳答案
阻止函数循环到无穷大(甚至超越无限大)的最简单方法是每X秒/分钟/小时/光年调用一次。
使用setInterval(searchFor, 1000);
,其中第二个参数是时间间隔(以毫秒为单位)。
要将参数传递给您的searchFor
函数,您必须创建一个匿名函数,这样就不会立即对其进行调用。
setInterval( function() { searchFor ("/hello"); }, 1000 );
这将每隔约1秒钟调用一次函数,不过请注意,JavaScript会有一些开销,并且会稍有延迟。另外,请注意不要过于频繁地循环执行函数,因为这样做会很昂贵,并且浏览器具有内置延迟,例如,您将无法将Interval设置为2 ms,并且通常无法跨浏览器运行该函数。
编辑:将事件绑定到文本框中的更改的更优雅的解决方案也是可行的,具体取决于页面的设置方式和访问权限,如果不知道该结构,将很难回答。