manifest v3中已经移除了background.js机制,我正在寻找如何在后台执行周期性操作。
这个升级指南建议使用Chrome Alarm API:https://developer.chrome.com/docs/extensions/mv3/migrating_to_service_workers/ 具体来说,它说:
"我们可以使用Alarm API代替。像其他监听器一样,Alarm监听器应该在你脚本的顶层注册。"
不清楚需要在哪个脚本的顶层注册,但是当使用我的chrome扩展程序入口点 "popup.js" 时,它确实会定期执行,但仅在chrome弹出窗口实际打开时才执行。我需要即使当弹出窗口关闭时也能在后台执行。一个副作用是,我得到chrome.alarms的undefined,直到我在清单文件中添加 "alarms" 权限,然后它就不会出错了,但我仍然无法在后台运行。
由于上述文章是在服务工作者的环境下,所以我认为你需要将Alarm监听器放在service-worker.js文件的顶层。但事实并非如此,即使授予"alarms"权限,我在这里仍然得到chrome.alarms的undefined:
service-worker.js
这个升级指南建议使用Chrome Alarm API:https://developer.chrome.com/docs/extensions/mv3/migrating_to_service_workers/ 具体来说,它说:
"我们可以使用Alarm API代替。像其他监听器一样,Alarm监听器应该在你脚本的顶层注册。"
不清楚需要在哪个脚本的顶层注册,但是当使用我的chrome扩展程序入口点 "popup.js" 时,它确实会定期执行,但仅在chrome弹出窗口实际打开时才执行。我需要即使当弹出窗口关闭时也能在后台执行。一个副作用是,我得到chrome.alarms的undefined,直到我在清单文件中添加 "alarms" 权限,然后它就不会出错了,但我仍然无法在后台运行。
由于上述文章是在服务工作者的环境下,所以我认为你需要将Alarm监听器放在service-worker.js文件的顶层。但事实并非如此,即使授予"alarms"权限,我在这里仍然得到chrome.alarms的undefined:
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
});
}
});
});
出于绝望,我也在清单文件中添加了“background”权限,但这也没有帮助。
有什么线索可以让我在清单v3中定期后台运行某些内容吗?看起来闹钟API应该是实现的方式,但显然从服务工作者中无法访问它?