Javascript chrome扩展仅在后台页面激活时运行
现在,我的扩展只是用来跟踪用户最常访问的站点。然而,它似乎只有在我的背景页面处于活动状态时才起作用。例如,如果我打开后台控制台或使其持久化,它将顺利运行。但是,如果我的后台控制台已关闭或persistent设置为false,则它将不再更新站点 以下是我的背景脚本:Javascript chrome扩展仅在后台页面激活时运行,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,现在,我的扩展只是用来跟踪用户最常访问的站点。然而,它似乎只有在我的背景页面处于活动状态时才起作用。例如,如果我打开后台控制台或使其持久化,它将顺利运行。但是,如果我的后台控制台已关闭或persistent设置为false,则它将不再更新站点 以下是我的背景脚本: chrome.runtime.onInstalled.addListener(function(){ console.log("App Installed"); }); var web_list =[]; chrome.t
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分钟
我不知道该怎么办。我似乎不知道怎么了 如果不将背景页
“persistent”
设置为true,您希望避免什么?根据扩展的性质,它需要持久化。我在文档中读到,您应该始终避免使背景页持久化。我还想知道为什么它只在后台页面持久化时才起作用。让它持久化并没有什么坏处。你不会让任何东西过载,也不会浪费太多资源。当它不是持久性的时候,它就不工作了,因为每次它完成它的执行时,它都会被卸载,从而丢失chrome.storage
之外的数据。在任何情况下,如果需要最佳的扩展性能,您都可以遵循。