后台定期同步演示 - 离线内容更新
注册Periodic Background Sync,让应用在后台定期获取最新数据并更新缓存。
UD5工具箱
可视化演示 Service Worker 从解析到冗余的完整生命周期
-// Service Worker 生命周期示例
const VERSION = 'v1.0.0';
// 📄 解析阶段:浏览器下载并解析SW脚本
self.addEventListener('install', (event) => {
// 🔧 安装中 (Installing)
console.log('[SW] install 事件触发');
event.waitUntil(
caches.open('my-cache-v1').then(cache => {
return cache.addAll(['/index.html', '/style.css', '/app.js']);
})
);
// 可调用 skipWaiting() 跳过等待
// self.skipWaiting();
});
self.addEventListener('activate', (event) => {
// ⚡ 激活中 (Activating)
console.log('[SW] activate 事件触发');
event.waitUntil(
caches.keys().then(keys => {
return Promise.all(
keys.filter(k => k !== 'my-cache-v1').map(k => caches.delete(k))
);
})
);
// 立即控制所有页面
// clients.claim();
});
self.addEventListener('fetch', (event) => {
event.respondWith(
caches.match(event.request).then(res => res || fetch(event.request))
);
});
skipWaiting()。clients.claim() 可立即控制所有页面。skipWaiting() 在 install 事件中调用,可以让新安装的 SW 跳过等待阶段,立即进入激活流程。默认情况下,新 SW 会等待所有使用旧 SW 的页面关闭后才激活。适用场景:需要立即推送更新的情况。注意:跳过等待可能导致页面资源版本不一致,需配合 clients.claim() 使用。clients.claim() 在 activate 事件中调用,让新激活的 SW 立即接管所有已打开的页面,无需等待页面刷新。默认情况下,激活的 SW 只控制之后打开的页面。结合 skipWaiting() 可实现 SW 的无缝更新,让用户始终使用最新版本。skipWaiting() 或关闭所有页面来激活新版本。也可手动调用 registration.update() 来触发更新检查。/app/sw.js 的默认 scope 是 /app/,可控制 /app/ 下的所有页面。可通过 register('/sw.js', {scope: '/app/'}) 显式指定。合理设置 scope 可以精确控制 SW 的影响范围。registration.unregister() 注销 SW;4) SW 脚本 URL 返回 404 或其他错误。console.log(),日志会显示在 DevTools 的 console 中;4) 使用 chrome://serviceworker-internals/ 查看所有已注册的 SW;5) 在 DevTools → Sources 中可以直接在 SW 脚本中设置断点。注册Periodic Background Sync,让应用在后台定期获取最新数据并更新缓存。
创建当用户离线时展示的简单HTML页面,结合Service Worker使用。
模拟 Service Worker 从安装到激活的完整生命周期,理解更新机制。
注册一个后台同步任务,展示如何在网络恢复后自动同步表单提交等操作。
创建一个测试自定义元素,记录并展示 connectedCallback, attributeChangedCallback 等执行顺序。
打开一个始终置顶的小窗口,在其中显示自定义内容(例如笔记/时钟),实验新API。
团队成员每日更新工作状态和身体状态,便于经理远程了解。
配置事件类型和重试间隔,生成用于接收 SSE 的前端 EventSource 代码和后端流示例。
在单页内模拟MPA过渡效果,自定义进场/出场动画,体验View Transitions API丝滑切换。
展示一些常用内置HTML元素和自定义元素例子,提供代码复制。
上传 GIF 动画,提取每一帧并拼接为单张精灵表图片,可设置排列方式,用于游戏开发。
根据输入的外部域名,生成 dns-prefetch、preconnect 和 preload 标签。
输入一组快捷键,检测在主流操作系统和浏览器中是否已被系统或软件占用。
浏览 Chrome DevTools Protocol 域和方法,填充参数生成 JSON 命令,用于远程调试。
向指定 URL 发送不同 HTTP 方法的请求,显示响应状态码、头部和主体,学习 RESTful API。
发起请求获取当前URL或任意允许CORS的URL的Response Headers,展示详情。
从眉毛、眼睛、嘴巴等部件中拖拽组合,生成独一无二的日式颜文字表情,一键复制。
粘贴terraform plan输出,解析并显示资源的增加、更改与销毁列表,辅助审查。
捕捉页面粘贴事件,展示文本、HTML 或图片数据,演示如何定制粘贴行为。
调节频率、包络和波形,合成短促的UI提示音并下载WAV。
选择扩展类型(弹出、内容脚本、后台),生成完整的项目文件和 manifest.json。
可视化线段树的构建、单点更新和区间求和查询过程,理解树状结构。
提供一份涵盖性能、安全、备份、监控等上线前检查清单,可自定义勾选。
配置启动画面背景色与图标,生成对应manifest和meta标签代码。
使用Service Worker拦截fetch请求,并返回用户自定义的JSON模拟数据,用于前端独立开发。
激活 beforeunload 事件,尝试刷新或关闭标签页时会弹出浏览器确认提示,展示实现方式。
解析标准Cron表达式,显示未来多次执行的具体日期时间,辅助验证定时任务配置。
随机组合种族、职业、性格、秘密和过往事件,创造丰富的虚构角色背景。
配置字体、颜色、背景,生成可粘贴到浏览器控制台的%c格式化日志代码。
创建一个自定义元素,展示 constructor、connectedCallback、attributeChangedCallback 等钩子的触发时机。