gpt4 book ai didi

javascript - 如何在 list v3 Chrome 扩展程序中定期调用函数?

转载 作者:行者123 更新时间:2023-12-04 08:02:22 25 4
gpt4 key购买 nike

Service workers replace background pages in manifest v3 chrome extensions ,我正在尝试将一个用于我的扩展。我需要能够定期运行一个函数,并且 it looks like alarms are the way to go .在示例中,他们建议在服务人员的顶层执行此操作:

chrome.alarms.create({ delayInMinutes: 3.0 });

chrome.alarms.onAlarm.addListener(() => {
chrome.action.setIcon({
path: getRandomIconPath(),
});
});
但据我了解,我的服务人员在事件之间是否被杀死是不确定的。我相信如果浏览器杀死我的服务 worker ,这将每 3 分钟调用一次,因为当脚本重新启动以处理警报时,它将再次运行第一行并排队另一个警报。
相比之下,如果浏览器让我的服务人员在警报之间存活 3 分钟,这将不会循环,因为它只会调用 addListener()一次,但将调用回调两次(一次用于最初产生此服务 worker 的第一个警报,再次用于在此服务 worker 调用的第一行注册的警报)。 Service Worker 最终会死掉,并且没有警报会再次唤醒它。
我是否误解了事件在这里的运作方式?如果没有,如何注册一次再次发生的警报 chrome.alarms.create({ periodInMinutes: 3.0 });并避免每次重新启动我的服务人员时重新注册它?
注意: delayInMinutes触发一次, periodInMinutes正在重新出现。

最佳答案

虽然它是非确定性的,但规则非常简单,worker 的行为几乎与 ManifestV2 的旧事件页面完全相同,主要点是:

  • 它会在发生注册的 API 事件时唤醒
  • 它运行整个脚本,以便重新注册 API 监听器
  • 它为唤醒它的 API 事件运行监听器
  • 它在最后一个 API 事件后 30 秒(MV2 中为 15 秒)后卸载;如果触发了另一个 API 事件,则重新启动卸载计时器;如果有用于 chrome.runtime 消息传递的开放端口,则计时器将延长五分钟,在 MV3 中,消息传递端口在五分钟后被强制断开,而在 MV2 中,这些端口从不强制断开连接,从而使 MV2 事件页面保持事件状态。

  • 现在回到那个演示脚本。你是对的:它依赖于非确定性行为。就像扩展文档中的许多示例一样,这很糟糕。使用 API 引用和 devtools 调试器。
    一个更现实的例子是只注册一次警报,例如在 chrome.runtime.onInstalled 事件中,因为警报由浏览器内部记住。另外,最好给它一个 id,这样我们就可以检查它的存在:
    chrome.runtime.onInstalled.addListener(() => {
    chrome.alarms.get('periodic', a => {
    if (!a) chrome.alarms.create('periodic', { periodInMinutes: 3.0 });
    });
    });

    chrome.alarms.onAlarm.addListener(() => {
    chrome.action.setIcon({
    path: getRandomIconPath(),
    });
    });

    关于javascript - 如何在 list v3 Chrome 扩展程序中定期调用函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66391018/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com