2013-08-16 81 views
1

我正在做我的第一個Chrome擴展程序,並且在結束之前卡住了。Chrome擴展程序 - 後臺頁面和未讀項目

我得到了json服務器的響應,輸出html,將它緩存在localstorage中,檢查是否有緩存,如果沒有從服務器再次獲取,然後顯示。

現在。在background.js中,我需要每30分鐘檢查一下服務器上的json文件中是否有更新...如果顯示一個徽章,一旦點擊將徽章移除到下一次。但我不知道該怎麼做。因爲如果我製作了setInterval,它會觸及服務器,並且始終顯示徽章,即使沒有新的。你能幫我建立js嗎?

<script> 
    setInterval(function(){ 
     chrome.browserAction.setBadgeText({text:chrome.browserAction.setBadgeText({text: "!!!"});}); 
    }, 1800000); 
    </script> 

我也試過這種方式,但沒有任何反應。

function getUnreadItems(callback) { 
    $.ajax(..., function(data) { 
     process(data); 
     callback(data); 
    }); 
} 

function updateBadge() { 
    getUnreadItems(function(data) { 
     chrome.browserAction.setBadgeText({text:data.unreadItems}); 
    }); 
} 

var pollInterval = 1*60*60; // 60 min 
var timerId; 

function startRequest() { 
    updateBadge(); 
    timerId = window.setTimeout(startRequest, pollInterval); 
} 

function stopRequest() { 
    window.clearTimeout(timerId); 
} 

background.js

onload='startRequest()' 
+0

我不是一個鉻開發人員,但我不得不問...在你上面的函數中,我沒有看到任何時間比較。你正在檢查/存儲/比較任何時間戳嗎? – monsto

回答

0

看起來你永遠不會重置未讀郵件服務器上「讀」,讓您每一次都能ping服務器,它會用相同的號碼進行回覆並將因此再次顯示該號碼。

所以你可以做兩件事情:

  • 當您點擊按鈕和徽章重置爲0,就可以向服務器發送一個請求爲已讀標記所有項目。當然,哪個請求取決於您的服務器以及它接受的內容。這樣,服務器上的未讀計數將始終保持最新,並且您的擴展可能非常「愚蠢」:服務器返回的任何內容都是當前未讀項目的數量。

  • 如果你不能這樣做,你將不得不在本地保存一些信息到你的擴展中,並找出你自己的未讀數。我的意思是,不要只是請求未讀的計數,你需要獲得有關特定項目的信息,如獨特的ID。然後,每次您輪詢服務器以查看項目列表時,將ID添加到保存在localStorage例如(或chrome.storage.sync)中的列表中,viewed標記設置爲false(如果該ID尚不確定)。後臺腳本將通過該列表並計算viewed標記設置爲false並將其用作未讀計數的項目數。無論何時打開彈出窗口,您都會瀏覽整個列表,並將viewed標記設置爲true以表示您的所有項目。

我爲an extension to get your Hulu playlist做了類似的事情。當我從播放列表中刪除視頻時,我做了第一個選項,以便在本地和服務器上刪除視頻。我做了第二個選擇,因爲我想顯示新視頻的計數,但Hulu沒有記錄這些。 (它知道玩和放過的,而不是「你已經得到通知,這種新的視頻可用」,我想

特別見,this section

// Testing that it's the first time I'm seeing this show 
if (show_ids.indexOf(new_show.id) == -1) { 
    new_shows_number++; 
    new_show.seen = "no"; 
} else { 
    new_show.seen = "yes"; 
} 

這裏show_ids是ID列表我已經保存並標記爲在本地查看。如果new_show.id不在此列表中,則表示它是未查看的項目。

+0

非常感謝您的回覆,先生。我認爲第二宗案件適用於我。我能夠獲得唯一的id並將它們保存在localStorage中,它變成了超長的數字行,但是如果json文件發生更改,該行也會更新。所以我把它們保存在localStorage中,用我的popup.js然後在background.js中做這樣的事情:http://pastebin.com/udnMGHfX你認爲它會起作用嗎? – user2686487

+0

你想在第5行做什麼'var htmlIds = value.id'?它看起來像你想連接ID?像'htmlIds + = value.id'?如果是這樣的話,你應該首先把'var。htmlIds ='';'放在$ .getJSON()塊的外面。使用保存的字符串檢查連接的字符串是脆弱的,因爲如果返回的ID沒有以相同的方式排序,它將不起作用。你可以使用'JSON.stringify'和'JSON.parse'來處理對象。前者當你保存到'localStorage'時,後者當你想使用它時。 –

+0

然後,您可能應該創建一個已保存/已讀ID的數組,並在其中查找新的ID。這樣,服務器發送的訂單就無關緊要了。另外,操縱真實對象而不是字符串會更清晰。這也是我在Qulu所做的。 –

相關問題