2013-08-16 67 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所做的。 –

相关问题