首页 > 其他分享 >Chrome扩展开发使 Service Worker 保持活跃状态

Chrome扩展开发使 Service Worker 保持活跃状态

时间:2024-06-21 14:55:16浏览次数:23  
标签:console Service Chrome self Worker addEventListener event

Service Worker 设计为独立于单个页面的后台线程,它通常在没有控制任何页面(clients)时会被浏览器停止或处于等待状态。但是,如果你希望即使在插件页面关闭后,Service Worker 仍然保持活跃,可以尝试以下方法:

  • 使用多个页面:保持至少一个页面(如后台管理页面)打开,该页面由 Service Worker 控制。Service Worker 会随着最后一个它控制的页面关闭而停止。
  • 定期触发事件:如果你的 Service Worker 需要持续运行,可以设计一些逻辑,比如定期发送通知或执行后台同步,这样浏览器会认为 Service Worker 仍在使用中。

这里介绍一下定期触发事件。

  我们通过定期向浏览器扩展存储写入当前时间(称为“心跳”),来保持Service Worker的活跃状态。这种做法可以减少Service Worker因长时间不活动而被浏览器终止。

示例:

// Service Worker 主入口点
self.addEventListener('install', async () => {
  console.log('Service Worker installing...');
  // 在安装时启动心跳
  await startHeartbeat();
});

// 心跳函数定义
let heartbeatInterval;

async function runHeartbeat() {
  await chrome.storage.local.set({ 'last-heartbeat': new Date().getTime() });
}

async function startHeartbeat() {
  // 在Service Worker启动时立即运行一次心跳
  await runHeartbeat();
  // 然后每20秒运行一次
  heartbeatInterval = setInterval(runHeartbeat, 20 * 1000);
}

async function stopHeartbeat() {
  if (heartbeatInterval) {
    clearInterval(heartbeatInterval);
    heartbeatInterval = null;
  }
}

// Service Worker 激活事件
self.addEventListener('activate', async () => {
  console.log('Service Worker activating...');
  // 激活时,可能需要清理旧的心跳间隔
  await stopHeartbeat();
  // 然后重新启动心跳
  await startHeartbeat();
});

// Service Worker 消息事件
self.addEventListener('message', async (event) => {
  if (event.data === 'stopHeartbeat') {
    console.log('Stopping heartbeat...');
    await stopHeartbeat();
  } else if (event.data === 'startHeartbeat') {
    console.log('Starting heartbeat...');
    await startHeartbeat();
  }
});

// Service Worker Fetch 事件
self.addEventListener('fetch', (event) => {
  // 在处理fetch事件时,可以临时启动心跳以保持活跃
  console.log('Handling fetch event...');
  // 这里可以根据需要决定是否启动心跳
});

// 当Service Worker即将被关闭时
self.addEventListener('beforeunload', async () => {
  console.log('Service Worker beforeunload...');
  // 停止心跳
  await stopHeartbeat();
});

// 监听并处理错误,确保Service Worker稳定运行
self.addEventListener('error', (event) => {
  console.error('Service Worker error:', event);
});

// 监听并处理安装失败事件
self.addEventListener('installerror', (event) => {
  console.error('Service Worker install error:', event);
});

// 监听并处理活动失败事件
self.addEventListener('activateerror', (event) => {
  console.error('Service Worker activate error:', event);
});

 

标签:console,Service,Chrome,self,Worker,addEventListener,event
From: https://www.cnblogs.com/caihongmin/p/18260507

相关文章

  • Service Mesh技术详解
    深入探讨ServiceMesh的基本概念和核心技术,涵盖了服务发现、负载均衡、断路器与熔断机制,以及数据平面与控制平面的详细工作原理和实现方法。关注作者,复旦博士,分享云服务领域全维度开发技术。拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,复旦机器人智能实验室成员,国......
  • Chrome谷歌浏览器如何设置,才能正常使用?
    Chrome浏览器,也被称为谷歌浏览器,由于简洁的界面设计,极快的响应速度,强大的插件商店,在全球浏览器市场份额中一直都处于遥遥领先的地位。但是因为2010年谷歌宣布退出中国,国内不能再使用谷歌的服务,所以在国内需要设置一下才能正常的使用,如何设置呢?今天教给大家。首先下载Chrome浏......
  • kube-prometheus项目中的ServiceMonitor服务发现
    通过一个叫ServiceMonitor的资源来自动发现监控目标并动态生成配置,不用再维护配置文件通过ServiceMonitor监控应用时,如果监控没有找到目标主机的排查步骤,排查步骤大致如下:确认ServiceMonitor是否成功创建。kubectlgetservicemonitors-nmonitoringkube-controller-manage......
  • Apple - Authorization Services Programming Guide
    本文翻译整理自:AuthorizationServicesProgrammingGuide(更新日期:2011-10-19https://developer.apple.com/library/archive/documentation/Security/Conceptual/authorization_concepts/01introduction/introduction.html#//apple_ref/doc/uid/TP30000995文章目录一......
  • WebService异常: 提供的 URI 方案“https”无效,应为“http”。 参数名: via
    解决如下:把节点 httpsTransport改为 httpTransport原配置:<bindings><customBinding><bindingname="ZWS_CUST"><mtomMessageEncodingmessageVersion="Soap11WSAddressing10"/>......
  • 多线程设计模式之Worker Thread模式
    以前用C/C++写进程池,要么一下子fork最大进程数,要么来一个任务fork一个进程。多线程也可以这样设计,并总结这种模式为WorkerThread模式。类图如下:具体实现参考如下代码(一次性开启足够多的线程):1)Request......
  • MybatisPlus之继承IService
    有一些简简单单的数据库增删改查还需要Service到Mapper一步步地来吗?答案是否定地,甚至代码都不用实现哦。这就是因为IService接口提供了一些基础功能的实现IService和ServiceImplIService只是一个接口,它并不能实现功能,如果你的service的接口继承它,继承过来的只是接口没有功......
  • DolphinScheduler日志乱码、worker日志太多磁盘报警、版本更新导致不兼容怎么办?
    作者|刘宇星本文作者总结了在使用ApacheDolphinScheduler过程中遇见过的常见问题及其解决方案,包括日志出现乱码、worker日志太多磁盘报警、版本更新导致不兼容问题等,快来看看有没有困扰你想要的答案吧!DolphinScheduler集群环境有多台worker(worker1,worker2,worker3),多个......
  • SQL SERVER ANALYSIS SERVICES决策树、聚类、关联规则挖掘分析电商购物网站的用户行为
    全文链接:http://tecdat.cn/?p=32118最近我们被客户要求撰写关于电商购物网站的用户行为的研究报告,包括一些图形和统计输出。假如你有一个购物类的网站,那么你如何给你的客户来推荐产品呢? ( 点击文末“阅读原文”获取完整文档、数据 )这个功能在很多电商类网站都有,那么,通过SQLS......
  • MTFAppServiceDS.dll文件丢失导致程序无法运行问题
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个MTFAppServiceDS.dll文件(挑选合适的版本文......