javascript - 发布时 Chrome 扩展后台脚本未运行
问题描述
一段时间以来,我一直在研究 chrome 扩展。
我有一个不持久的后台 JS 文件。在本地测试扩展时,background.js 文件正确地将结果打印到控制台并在必要时触发。
但是,一旦上传,background.js 似乎不再按预期执行,并且不会向控制台打印任何内容。
这是 background.js 代码:
chrome.runtime.onInstalled.addListener(function() {
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab){ // listener for when first loading the page
var url = tab.url;
console.log(url);
if(url != undefined && changeInfo.status == "complete"){ // if the page is done loading, this is done bc .onUpdated has issues with multiple misfires
console.log(url);
var sites = [];
chrome.storage.sync.get({list:[]}, function(data){ // retrieve list of blackListed sites
sites = data.list;
console.log(sites);
for(var i = 0; i < sites.length; i++){
if(tab.url.includes(sites[i])){
chrome.storage.sync.get(['time'], function(data){
if(data.time != null){ // if we are in an active session
chrome.storage.sync.get(['userCausedHours'], function(data2) {
console.log(data2.userCausedHours)
chrome.storage.sync.set({'userCausedHours': data2.userCausedHours + 1}, function() {
console.log('hours = ' + data2.userCausedHours + 1) ;
})
});
}
})
}
}
})
}
});
chrome.tabs.onActivated.addListener(function(activeInfo) { // listener for when flipping back and forth between pages
var sites = [];
chrome.storage.sync.get({list:[]}, function(data){ // retrieve list of blackListed sites
sites = data.list;
console.log(sites);
// how to fetch tab url using activeInfo.tabid
chrome.tabs.get(activeInfo.tabId, function(tab){
console.log(tab.url);
for(var i = 0; i < sites.length; i++){
if(tab.url.includes(sites[i])){
chrome.storage.sync.get(['time'], function(data){
if(data.time != null){ // if we are in an active session
chrome.storage.sync.get(['userCausedHours'], function(data2) {
console.log(data2.userCausedHours)
chrome.storage.sync.set({'userCausedHours': data2.userCausedHours + 1}, function() {
console.log('hours = ' + data2.userCausedHours + 1) ;
})
});
}
})
}
}
});
})
});
});
这是我的清单:
{
"name": "Serenity",
"version": "1.01",
"description": "Productivity made fun",
"permissions" :["tabs","storage"],
"background" :{
"scripts": ["background.js"],
"persistent": false
},
"options_page": "options.html",
"browser_action": {
"default_popup": "popup.html",
"default_icon": {
"16": "images2/favicon-16x16.png",
"32": "images2/favicon-32x32.png",
"128": "images2/favicon-128.png"
}
},
"icons": {
"16": "images2/favicon-16x16.png",
"32": "images2/favicon-32x32.png",
"128": "images2/favicon-128.png"
},
"manifest_version": 2
}
解决方案
如评论中所述,问题在于我将 .onInstalled 留在了两个侦听器周围以获取选项卡。将这些侦听器移动到全局上下文中解决了问题,我的扩展不需要 .onInstalled
推荐阅读
- alert - 发生 Service Bus [Premium] 故障转移时发出警报?
- python - TFX 同时运行多个训练器
- sql - 递归查询 postgres12 给出 [42P19] 错误
- java - 为什么我当前所在的城市在 android studio 中为空?
- jquery - 为什么我的淡入淡出计时器不起作用
- angular - 如何以角度测试函数?
- css - CSS Grid - 右对齐特定列
- java - 当 OpenGL ES 2.0/3.0 中有许多对象时,alpha 混合出现问题
- reactjs - 如何在 React Native 中正确测试
- python - 我将如何使用 PIL 对图像进行像素化?