Chrome扩展程序 - 背景页面和未读项目

时间:2013-08-16 14:23:11

标签: javascript jquery ajax json google-chrome-extension

我正在制作我的第一个镀铬扩展程序,并且在结束之前就已经卡住了。

我从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()'

1 个答案:

答案 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不在此列表中,则表示它是未查看的项目。