服务工作者是JavaScript代码,一旦向相关的来源和范围注册,即使其控制的页面不再打开,也会响应浏览器启动的事件。通过处理`fetch`事件,服务工作者可以提供自定义网络行为,例如离线支持(通过Cache API)。通过处理`push`事件,服务工作者可以“醒来”并显示通知。
我有一个用 Gatsby 构建的旧网站,它使用 gatsby-plugin-offline 通过服务工作者缓存页面。我创建了一个新站点(在 NextJS 中),现在通过 Netlify 部署到相同的 URL...
使用 Angular Service Worker 时如何在注销后清除 api 的响应缓存?
我通过使用角度生成的服务工作线程缓存API的响应,现在我想在用户决定注销后清除这些缓存,我制作了新的自定义服务工作线程文件来监听混乱...
我使用 workbox-background-sync 插件在用户离线时对 POST 请求进行排队,设置如下: const postSyncPlugin = new BackgroundSyncPlugin('post-requests', { 最大保留时间...
服务工作线程无法处理 React vite 中的 .tsx/.jsx 文件。为什么?
console.log("服务人员"); 常量 OFFLINE_ASSETS = [ “/”, “/src/main.tsx”, “/vite.svg”, `https://crypted-tbn0.gstatic.com/images?q=tbn:
为什么在我更改 Service Worker 后 safari 会要求允许在每个 window.open() 上弹出窗口?
为什么 safari 在我更改 Service Worker 后要求允许在每个 window.open() 上弹出窗口?并且不允许打开新选项卡。这是我的 Service Worker 的代码。 更新我的 Service Worker 后...
如果你能认出这一点: 第一秒这是一个很重的文件,所以它很重要。 我什么...
为什么我的网页在使用 Service Worker 缓存离线服务时速度很慢?
我正在尝试使我的网页完全离线工作,但在尝试从缓存加载时遇到了一些加载时间问题 我目前正在缓存我的网站所需的所有文件...
有没有一种方法可以在不更改脚本 URL 的情况下将值传递给 Service Worker? const 注册 = 等待 navigator.serviceWorker.register("/sw.js?version=" + 版本, { 范围:'/...
从 Javascript 强制完全刷新 Blazor WebAssembly PWA 应用程序
此代码位于index.html中。我使用最新版本的 Blazor WebAssembly PWA 应用程序调用 updateVersion。第一行是 Service Worker 的原始注册,它是
Fetch API 无法加载 <URL>。请求模式是“no-cors”但重定向模式不是“follow”
当我禁用 Shield 时,我仅在 Brave 浏览器中遇到此问题。我的博客上有 OWA 分析文件: https://stats.jcubic.pl/modules/base/js/owa.tracker-combined-min.js 我使用我的服务...
我为我的静态站点实现了 PWA。服务工作人员注册成功,我的页面也如我预期的那样离线工作,但真正的问题在于添加到主屏幕 我包括清单....
为什么我在客户端上看不到client.postMessage?
我的服务人员中有以下代码: 消息传递.onBackgroundMessage(函数(有效负载){ console.log("onBackgroundMessage 电子邮件和 contact_link:"); console.log(payload.data.email,pa...
Firefox 中的视频源不会调用 Service Worker
我的 Firefox 行为相当奇怪,我无法解释。想象一下这两个非常简单的 HTML 标签: ... 我的 Firefox 行为相当奇怪,我无法解释。想象一下这两个非常简单的 HTML 标签: <img src="http://localhost:1234/api/getBlob?file=1.jpg">... <video src="http://localhost:1234/api/getBlob?file=2.mp4">... 我编写了一个 Service Worker,将 JWT 添加到 Authorization 标头,因为我的后端不是公开的。 self.addEventListener('fetch', function (event) { const url = event.request.url.toLowerCase(); if (!url.includes('api/getblob')) { return; } if (event.request.headers.has('Authorization')) { return; } event.respondWith( (async function () { const token = await requestTokenFromMainThread(); const headers = new Headers(event.request.headers); headers.set('Authorization', 'Bearer ' + token); const modifiedRequestInit = { headers: headers, mode: 'cors', credentials: 'omit', }; const modifiedRequest = new Request(event.request, modifiedRequestInit); try { return fetch(modifiedRequest); } catch (error) { console.error('Error fetching resource:', error); return new Response('Error fetching resource', { status: 500 }); } })(), ); }); function requestTokenFromMainThread() { return new Promise((resolve) => { const channel = new MessageChannel(); channel.port1.onmessage = (event) => { resolve(event.data); }; self.clients.matchAll().then((clients) => { if (clients && clients.length) { clients[0].postMessage('requestToken', [channel.port2]); } }); }); } 这非常适合 Safari 和基于 Chromium 的浏览器(例如 Edge 或 Chrome 本身)。但 Firefox 的情况开始变得奇怪。虽然 <img src 是由服务人员处理的,但 <video src 不是,而且我从来没有进入过 fetch 函数。所以我把调试点放在 const url = event.request.url.toLowerCase(); 上,这永远不会被 <video src 击中,但会被 <img src 击中,我不确定为什么。 编辑1: 在 Firefox 中,如果我转到有问题的请求并单击“在控制台中用作获取” - 那么,正如几乎预期的那样,它就像一个魅力。 Firefox 中该问题的“修复”方法是将 crossorigin="anonymous" 属性添加到 video 标签中: <video src="..." crossorigin="anonymous"></video> 无论如何,我确实为 Firefox 打开了一张票,因为如果未定义 crossorigin,我不确定这是否是预期的行为。 门票:https://bugzilla.mozilla.org/show_bug.cgi?id=1923096
Angular 未捕获(承诺):ChunkLoadError:加载块 XXX 失败
我使用的是 Angular 12,我使用 Service Worker 来部署新版本。 看起来每次我将新版本部署到生产环境时(并且由于某种原因不在暂存阶段)。一些用户收到一堆
在 Manifest V3 下的 Firefox 中的 Service Worker 中使用 importScripts()
我正在开发浏览器扩展。在 Chrome 中,我可以简单地这样做: 清单.json: “背景”: { "service_worker": "脚本/vh_service_worker.js", }, 而我...
如何避免在 Service Worker 推送事件中显示通知
我目前在一个已经生成弹出消息的应用程序中工作,所以我想用firebase在后台监听推送通知,但我只想将一些数据传递给客户端,并避免
我如何在 chrome Extension(manifest V3) 的 Service Worker 中包含一个 socket.io-client
我从cdn复制了客户端socket.io脚本,然后使用importScript,但是当我真正运行它时,它给出了 ReferenceError:文档未定义 在 JSONPPolling.doPoll (socketio.js:3683) 在
我正在尝试改进我最近制作的渐进式网络应用程序。为了在开发时节省一点时间并降低出错的风险,我想自动显示版本号...
我有一些用于推送通知的 Firebase 代码,可以在 Chrome 和 iOS Safari 上运行,但无法在 Firefox 上运行 文档说 Firefox 不支持模块 哈...
Capacitor Service Worker 注册未知错误/网络连接被拒绝
我目前正在使用 Capacitor 制作一个应用程序,因为它使用内部 https 服务器而不是文件协议向 WebView 提供文件,这应该允许我使用服务工作者...