现在我的扩展程序应该跟踪用户最常访问的网站。但是,它似乎只在我的后台页面处于活动状态时起作用。例如,如果我打开我的后台控制台或者如果我使它持久化,那么它将毫无障碍地运行。但是,如果我的后台控制台已关闭或持久性设置为false,则它将不再更新站点时间。
这是我的背景脚本:
chrome.runtime.onInstalled.addListener(function(){
console.log("App Installed");
});
var web_list =[];
chrome.tabs.onUpdated.addListener(function(tabId, info, tab){
if(info.status == 'loading'){
logTime();
var site = tab.url.match('^(([^:/?#]+):)?(//([^/?#]*))?')[4];
web_list.push(site);
}
});
chrome.tabs.onActivated.addListener(function(){
logTime();
chrome.tabs.query({active: true, currentWindow: true}, function(tabs){
web_list.push(tabs[0].url.match('^(([^:/?#]+):)?(//([^/?#]*))?')[4]);
//get url of site and then extract host name
});
});
function logTime(){
if (web_list.length > 0){
var url = web_list[web_list.length - 1];
chrome.storage.sync.get('time', function(data){
var timeString = data.time;
var time = new Date(timeString);
var d = new Date();
var mins = (d - time)/60000;
chrome.storage.sync.get(url, function(data){
var items = data[url];
if(items){
items[0] = items[0] + mins;
items[0] = Math.round(items[0]*100)/100;
chrome.storage.sync.set({[url]: items});
}
else{
mins = Math.round(mins*100)/100;
items = [mins, false, false, 0, 0, 0];
chrome.storage.sync.set({[url]: items});
}
});
});
}
var date = new Date();
var dateString = String(date);
chrome.storage.sync.set({'time': dateString});
}
例如,在解压缩我的chrome扩展程序之后,请访问另一个标签中的www.reddit.com。重新加载reddit之后,它会说我在网站上的时间是0.11分钟,或者是我的弹出窗口中的任何内容。但是,如果我等待一分钟,此时我的后台脚本处于非活动状态,然后重新加载www.reddit.com,则我的弹出窗口中的时间不会更新。但是,如果将persistent设置为true或者后台控制台处于打开状态,则它运行完全正常并且值更新为1.11分钟。
我不确定该怎么做。我似乎无法弄清楚出了什么问题。