Chrome 分机报警/间隔一段时间后工作
Chrome extension alarm / interval working after a while
所以我遇到了这个问题,我需要打开一个 none 活动选项卡并偶尔将其设置为 URL,一切正常,直到经过一段未定义的时间,然后似乎负责设置 URL 的警报与所有后台脚本数据(变量被擦除)一起消失,在我的清单中我设置了“后台”权限但它没有帮助,我也试过使用 setInterval 但它没有多大帮助,这里有一些代码供您使用:
async function setGetJobAlarm() {
// try {
// chrome.alarms.clear("getAndExecuteJobs");
// } catch { }
// chrome.alarms.create("getAndExecuteJobs", { periodInMinutes: 0.3 });
// chrome.alarms.onAlarm.addListener(async (alarm) => {
// if (alarm.name == "getAndExecuteJobs") {
// try {
// await getAndExecuteJobs();
// }
// catch (err) {
// console.log(err);
// }
// }
// });
if (getAndExecuteJobs > 0) {
clearInterval(getAndExecuteJobsInterval);
}
getAndExecuteJobsInterval = setInterval(async () => {
try {
await getAndExecuteJobs();
}
catch (err) {
console.log(err);
}
}, 30000);
}
清单:
{
"name": "aaaaa",
"version": "0.0.1",
"manifest_version": 3,
"background": {
"service_worker": "bgjob.js"
},
"permissions": [
"tabs",
"alarms",
"activeTab",
"background"
//"identity",
//"identity.email"
],
"host_permissions": [
"http://*/",
"https://*/"
],
"icons": {
"16": "aaaaa.png",
"48": "aaaa.png",
"128": "aaaa.png"
},
"action": {
"default_popup": "/popout/pop.html",
"default_title": "aaaaa"
},
"content_scripts": [
{
"matches": [
"http://*/*",
"https://*/*"
],
"js": [
"jquery-3.6.0.slim.min.js"
]
}
]
}
我不知道遗漏了什么,用谷歌搜索了很多但没有用,
第二个问题是,我正在尝试加载名为“hello.html”的简单扩展 html 文件,html 已打开,但出现此错误:
无法访问 URL“chrome-扩展名://locblcbeeombbgmpiofcnmhfimfpjipb/hello.html”的内容。扩展清单必须请求访问此主机的权限。
我尝试添加“chrome-extension://*/”但没有成功,谢谢!
后台脚本会在 30 秒后自动终止,因此 setTimeout/setInterval 这样或更长的延迟永远不会 运行。
删除 setTimeout/setInterval 并使用 chrome.alarms
API 且 periodInMinutes
至少为 1,因为这是网络商店中已发布扩展所允许的最小间隔。
如果您的工作流程确实需要低于 1 分钟的间隔,您将不得不人为地延长 service worker 的生命周期,请参阅 的第二部分。
所以我遇到了这个问题,我需要打开一个 none 活动选项卡并偶尔将其设置为 URL,一切正常,直到经过一段未定义的时间,然后似乎负责设置 URL 的警报与所有后台脚本数据(变量被擦除)一起消失,在我的清单中我设置了“后台”权限但它没有帮助,我也试过使用 setInterval 但它没有多大帮助,这里有一些代码供您使用:
async function setGetJobAlarm() {
// try {
// chrome.alarms.clear("getAndExecuteJobs");
// } catch { }
// chrome.alarms.create("getAndExecuteJobs", { periodInMinutes: 0.3 });
// chrome.alarms.onAlarm.addListener(async (alarm) => {
// if (alarm.name == "getAndExecuteJobs") {
// try {
// await getAndExecuteJobs();
// }
// catch (err) {
// console.log(err);
// }
// }
// });
if (getAndExecuteJobs > 0) {
clearInterval(getAndExecuteJobsInterval);
}
getAndExecuteJobsInterval = setInterval(async () => {
try {
await getAndExecuteJobs();
}
catch (err) {
console.log(err);
}
}, 30000);
}
清单:
{
"name": "aaaaa",
"version": "0.0.1",
"manifest_version": 3,
"background": {
"service_worker": "bgjob.js"
},
"permissions": [
"tabs",
"alarms",
"activeTab",
"background"
//"identity",
//"identity.email"
],
"host_permissions": [
"http://*/",
"https://*/"
],
"icons": {
"16": "aaaaa.png",
"48": "aaaa.png",
"128": "aaaa.png"
},
"action": {
"default_popup": "/popout/pop.html",
"default_title": "aaaaa"
},
"content_scripts": [
{
"matches": [
"http://*/*",
"https://*/*"
],
"js": [
"jquery-3.6.0.slim.min.js"
]
}
]
}
我不知道遗漏了什么,用谷歌搜索了很多但没有用,
第二个问题是,我正在尝试加载名为“hello.html”的简单扩展 html 文件,html 已打开,但出现此错误:
无法访问 URL“chrome-扩展名://locblcbeeombbgmpiofcnmhfimfpjipb/hello.html”的内容。扩展清单必须请求访问此主机的权限。
我尝试添加“chrome-extension://*/”但没有成功,谢谢!
后台脚本会在 30 秒后自动终止,因此 setTimeout/setInterval 这样或更长的延迟永远不会 运行。
删除 setTimeout/setInterval 并使用 chrome.alarms
API 且 periodInMinutes
至少为 1,因为这是网络商店中已发布扩展所允许的最小间隔。
如果您的工作流程确实需要低于 1 分钟的间隔,您将不得不人为地延长 service worker 的生命周期,请参阅