【发布时间】:2021-06-12 05:47:37
【问题描述】:
在 manifest v3 中删除了 background.js 机制,现在我正在寻找如何在后台进行定期操作,因为它已经消失了。
本升级指南说要使用 chrome alarm api: https://developer.chrome.com/docs/extensions/mv3/migrating_to_service_workers/
具体来说:
相反,我们可以使用警报 API。与其他侦听器一样,警报侦听器应在脚本的顶层注册。
不清楚它需要成为顶层的哪个脚本,但是当使用我的 chrome 扩展程序的入口点“popup.js”时,它会定期执行,但只有在 chrome 弹出窗口实际打开时才会执行。即使弹出窗口关闭,我也需要它在后台执行。附带说明一下,在我将“警报”添加到清单文件中的权限之前,我没有为 chrome.alarms 定义,然后它不会阻塞,但我仍然遇到它没有运行后台的问题。
由于上面的文章是在 service worker 的上下文中,我假设您需要将警报侦听器放在 service-worker.js 文件的顶层。只有这行不通。我在这里未定义 chrome.alarms(即使授予了“警报”权限):
service-worker.js
console.log("inside service worker")
// getting chrome.alarms undefined here
chrome.alarms.create("alarm", { periodInMinutes: 1 });
将它放在安装事件监听器中也无济于事:
self.addEventListener('install', event => {
console.log("Installing service worker")
// still getting chrome.alarms undefined here
chrome.alarms.create("alarm", { periodInMinutes: 1 });
chrome.alarms.onAlarm.addListener((alarm) => {
if (alarm.name === "alarm") {
let milliseconds = new Date().getTime();
console.log(milliseconds)
chrome.action.setTitle({
title: "Hello "+ milliseconds
});
}
});
});
出于绝望,我也在清单中添加了“背景”权限,但这也无济于事。
任何线索如何在清单 v3 的后台定期运行某些东西?似乎警报 api 应该是您的操作方式,但服务人员显然无法访问它?
【问题讨论】:
-
我在为测试而制作的增量计数器中遇到了类似的问题。但是,就我而言,我被引导理解它不起作用,因为浏览器似乎每 6 秒重新启动一次服务工作者脚本。当我使用@wOxxOm 的建议修复问题并存储计数器值时,请查看此问题,尤其是此消息:github.com/GoogleChrome/chrome-extensions-samples/issues/630。
标签: google-chrome-extension service-worker manifest