javascript - 我将如何去使用 window.find() activate on the text only once

标签 javascript

我使用 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 有一些开销并且会有轻微的延迟。还要注意不要过于频繁地循环你的函数,因为它会很昂贵,并且浏览器有内置的延迟,例如,你将无法将 setInterval 设置为 2 毫秒并让它正常跨浏览器运行。

编辑:将事件绑定(bind)到文本框中的更改的更优雅的解决方案也是可能的,这取决于页面的设置方式和您对它的访问,如果不知道该结构就很难回答。

关于javascript - 我将如何去使用 window.find() activate on the text only once,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31374095/

相关文章:

javascript - Rgd : Dual Horizontal Slider

javascript - 如何计算动态创建的div

java - 使用JavaScript从textbox获取值并通过AJAX在jsp页面的textarea中显示时无法显示%(百分比)符号

javascript - TS2331 'this' 无法在模块或命名空间主体中引用

javascript - 通过纯js​​创建动画彩虹

php - 在页面中我有 for 循环函数吗?在 for($i=0;$i<=$max;$i++){ Size 查询中只从 mysql 数据库检索一行?

javascript - WordPress 插件中的 jQuery

javascript - ng-show 和 ng-if 无法显示内容

javascript - 为什么 Promise-Limit 在 Nodejs 中不起作用?

javascript - 正则表达式 exec() 循环永远不会在 JS 中终止