我正在制作我的第一个镀铬扩展程序,并且在结束之前就已经卡住了。
我从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 :(得分:0)
看起来您从未将未读项目重置为服务器上的“已读”,因此每次您将ping服务器时,它将使用相同的号码进行回复,从而再次显示该号码。
所以你可以做几件事:
当您单击按钮并将徽章重置为0时,您可以向服务器发送请求以将所有项目标记为已读。哪个请求当然取决于您的服务器及其接受的内容。这样,服务器上的未读计数将始终是最新的,并且您的扩展可能非常“愚蠢”:服务器返回的是当前未读项目的数量。
如果你不能这样做,你必须在本地保存一些信息到您的分机,并自己找出未读数。我的意思是,您不需要仅仅请求未读计数,而是需要获取有关特定项目的信息,例如唯一ID。然后,每次在服务器上轮询项目列表时,都会将ID添加到保存在localStorage
中的列表(例如chrome.storage.sync
),viewed
标记设置为{{1如果该ID尚未知晓。然后,后台脚本将遍历该列表,并计算false
标记设置为viewed
的项目数,并将其用作未读计数。每当您打开弹出窗口时,都会浏览整个列表并将false
标记设置为viewed
以获取所有项目。
我为an extension to get your Hulu playlist做了类似的事情。当我从播放列表中删除视频时,我做了第一个选项,以便在本地和服务器上删除它。我做了第二个选项,因为我想显示新视频的数量,但Hulu没有跟踪这一点。 (它知道播放和播放,但不是“你已经通知我这个新视频已经可以使用”。
特别参见this section:
true
此处// 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";
}
是我已保存并标记为在本地查看的ID列表。如果show_ids
不在此列表中,则表示它是未查看的项目。