Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript chrome扩展仅在后台页面激活时运行_Javascript_Google Chrome_Google Chrome Extension - Fatal编程技术网

Javascript chrome扩展仅在后台页面激活时运行

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

现在,我的扩展只是用来跟踪用户最常访问的站点。然而,它似乎只有在我的背景页面处于活动状态时才起作用。例如,如果我打开后台控制台或使其持久化,它将顺利运行。但是,如果我的后台控制台已关闭或persistent设置为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分钟


我不知道该怎么办。我似乎不知道怎么了

如果不将背景页
“persistent”
设置为true,您希望避免什么?根据扩展的性质,它需要持久化。我在文档中读到,您应该始终避免使背景页持久化。我还想知道为什么它只在后台页面持久化时才起作用。让它持久化并没有什么坏处。你不会让任何东西过载,也不会浪费太多资源。当它不是持久性的时候,它就不工作了,因为每次它完成它的执行时,它都会被卸载,从而丢失
chrome.storage
之外的数据。在任何情况下,如果需要最佳的扩展性能,您都可以遵循。