基于React/Vite的Tauri桌面应用中Service Worker注册失败问题
Tauri + React 集成Service Worker注册失败问题
我正尝试在基于Tauri的React桌面应用中集成Service Worker,以实现API响应缓存功能。该功能在标准浏览器环境中运行正常,但在Tauri环境下却无法完成Service Worker脚本的注册。
错误信息
Service Worker registration failed: TypeError: Failed to register a ServiceWorker for scope ('https://tauri.localhost/') with script ('https://tauri.localhost/service-worker.js'): An unknown error occurred when fetching the script.
相关代码
main.tsx
import './register-service-worker'; // other imports and code...
register-service-worker.ts
if ('serviceWorker' in navigator) { window.addEventListener('load', function () { navigator.serviceWorker.register(`${window.location.origin}/service-worker.js`, { scope: '/' }) .then(registration => { console.log('Service worker registered ✅', registration.scope); }) .catch(error => { console.error('Service Worker registration failed:', error); }); }); }
service-worker.js
self.addEventListener('install', () => { console.log('Service worker installed ✅'); }); self.addEventListener('activate', () => { self.clients.claim(); console.log('Service worker activated ✅'); }); self.addEventListener('message', () => { self.skipWaiting(); }); self.addEventListener('fetch', (e) => { console.log('🟢 Service worker match :)', e.request.url); e.respondWith( fetch(e.request).then(res => { const clonedResponse = res.clone(); caches.open('api-cache').then(cache => { cache.put(e.request, clonedResponse); }); return res; }).catch(error => { if (e.request.status !== 403) { return caches.match(e.request); } return Promise.reject(error); }), ); });
vite.config.ts
import viteStaticCopy from 'vite-plugin-static-copy'; export default { plugins: [ viteStaticCopy({ targets: [ { src: './src/service-worker.js', dest: './', }, ], }), ], }
我怀疑问题可能与Tauri环境中路径或作用域的处理方式有关,或是构建后Service Worker脚本的可用性问题。请问是否有人遇到过类似问题,或能提供问题排查的思路?
内容的提问来源于stack exchange,提问作者lent
相关产品推荐
相关产品推荐

