2016-12-30 96 views
1

所以我工作的一个脚本,将是网上节省WhatsApp的每一秒一个人(的WhatsApp网站)不能改变的变量值的JavaScript

,我有这样的:

//add zeros (run only once) 
 
function addZero(i) { 
 
    if (i < 10) { 
 
    i = "0" + i; 
 
    } 
 
    return i; 
 
} 
 

 
//Inject jQuery (run only once) 
 
var jq = document.createElement('script'); 
 
jq.src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"; 
 
document.getElementsByTagName('head')[0].appendChild(jq); 
 

 
// make online log 
 
//start 
 
var online = "yes"; 
 
var onlineCheck1 = window.setInterval(function() { 
 
    var x = $('#main>header>div.chat-body>div.chat-status>span').text() 
 
    var name = $('#main>header>div.chat-body>div.chat-main>.chat-title>span').text() 
 
    var d = new Date(); 
 
    if (x == "online") { 
 
    var online = "yes"; 
 
    console.log(d.toLocaleDateString('en-GB') + "|" + addZero(d.getHours()) + ":" + addZero(d.getMinutes()) + ":" + addZero(d.getSeconds()) + " " + name + " " + "was" + " " + "///online///"); 
 
    } else if (online == "yes") { 
 
    console.log("<------------>") 
 
    var online = "no"; 
 
    } else { 
 
    var online = "no"; 
 
    } 
 

 
}, 1000); //end

,它的日志,当有人在线,但我希望它把只有一个标记(< ------------>)当人处于脱机状态,它没有这样做。

所以我想要这个脚本做的是:
使变量“在线”的值为“是”
然后使变量“x”的值为元素的内部文本(它是在线的或最后一个看到.....)
然后看看x是否在线?那么将“online”的值更改为“yes”,如果日期和时间不是
,那么变量“online”的值是“yes”?然后记录一个标记(< ------------>)并将“在线”的值更改为“否”
如果不是?那么只需将变量“online”的值更改为“no”并重复。
我不知道发生了什么问题,但可能是因为某些原因变量没有得到改变。

注意:我使用chrome的控制台在web.whatsapp.com上运行此脚本,因此如果您想查看我的意思,请尝试使用它。

+3

等待@mrrogers你是对的:) OP删除'var'关键字('在线')在那个函数中;你在覆盖全球的“在线”声明。 – Pointy

+0

@Pointy是的,它的工作,谢谢 –

回答

2

首先,你的代码看起来有点脏 - 把函数放在setInterval之外。

其次,如果在代码的开头注入的来自google的Jquery脚本卡住了,并且在您调用它时未定义$,该怎么办?

然后,使用setTimeout并递归调用它而不是setInterval。至于你的变量“在线” - 你在你的函数中使用“var”,所以在你的匿名内部创建“var online”。函数的作用域和外部的“var online”不受操作的影响。尝试删除匿名内的“var”字。函数在setInterval中。

+0

我知道我的代码看起来“脏”,没有我检查过,没有Jquery没有注入网站,我真的不知道如何使用setTimeout而不是setInterval。你能告诉我吗?我要测试你的解决方案,这听起来合乎逻辑 –

+0

它的工作,谢谢,但你可以告诉我如何用setTimeout而不是setInterval做到这一点? –

+0

是的,当然。它看起来像这样: 第一次调用:的setTimeout(查,1000) VAR检查=函数c(){ //做你的东西,然后 的setTimeout(C,1000); } – curveball

1

试图从你想的if-else语句内改变变量删除“VAR”关键字...