我稍微使用了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,并且通常无法跨浏览器运行该函数。

编辑:将事件绑定到文本框中的更改的更优雅的解决方案也是可行的,具体取决于页面的设置方式和访问权限,如果不知道该结构,将很难回答。

09-11 01:24