2016-12-30 99 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」關鍵字...