我怎样才能在该文本上使用window.find()激活一次

时间:2015-07-13 00:56:16

标签: 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所以它会在其中运行文本,如果它是一个命令它会执行命令?或者有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

阻止你的功能从循环到无限(以及超越!)的最简单方法是每隔X秒/分钟/小时/光年就调用一次。

使用setInterval(searchFor, 1000);,其中第二个参数是以毫秒为单位的时间间隔。

要将参数传递给searchFor函数,您必须创建一个匿名函数,以便它不会立即被调用。

setInterval( function() { searchFor ("/hello"); }, 1000 );

这将每隔约1秒调用一次你的函数,但请记住,javascript会有一些开销,并且会有轻微的延迟。还要注意经常循环你的函数,因为它会很昂贵,并且浏览器有内置的延迟,例如,你将无法将setInterval设置为2毫秒并让它在浏览器中正常运行。

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