Vue3+Node项目Service Worker在火狐浏览器无法正常运行求助
Vue3 + Node应用Firefox下Service Worker异常问题
我正在为Node环境运行的Vue3应用配置Service Worker,目前该Service Worker在Chrome、Edge、Brave等Chromium内核浏览器及Safari中均可正常工作,但在Mozilla Firefox普通版和开发者版中始终无法正常运行。
Service Worker注册代码
try { const registration = await navigator.serviceWorker.register( "service-worker.js", { scope: process.env.NODE_ENV !== "development" ? "/" : "../sw" } ); registration.update(); if (registration.installing) { logger("Service worker installing", "info", "Service Worker"); } else if (registration.waiting) { logger("Service worker installed", "info", "Service Worker"); } else if (registration.active) { logger("Service worker active", "info", "Service Worker"); } } catch (error) { logger(error, "error", "Failed service worker registration"); }
向Service Worker发送数据的代码
navigator.serviceWorker.getRegistrations().then((registrations) => { const activeWorker = registrations[0].active; activeWorker.postMessage({ headers: { Id: process.env.NODE_ENV !== "production" ? `${userStore().role}` : `${userStore().auth.id_token}` }, api_url: process.env.API_URL, request_id: response.data.request_id, isRequest: false, type: this.selected.type, vat_code: this.company.vat_code }); });
处理Service Worker消息的代码
if ("serviceWorker" in navigator) { navigator.serviceWorker.addEventListener("message", async (event) => { let indexToRemove = documentStore().pending_visure.findIndex( (v) => v.request_id === event.data.request_id ); if (event.data.error) { try { documentStore().pending_visure[indexToRemove].status = "error"; } catch (error) { logger( error, "fatal", "Failed removal of purchased visura from pending array" ); } await raiseAlert(event.data.error); } else { try { documentStore().pending_visure.splice(indexToRemove, 1); } catch (error) { logger( error, "fatal", "Failed removal of purchased visura from pending array" ); } await raiseAlert(event.data); await requestStore() .fetchAll() .then(() => { documentStore().fetchAll(); }); } }); }
该Service Worker的设计逻辑为:调用它执行每15秒一次的轮询任务,收到返回对象后向应用发送消息并触发通知。
目前状态:Firefox中Service Worker能正确完成注册、激活和更新,但始终无法接收启动数据,浏览器显示其处于“已停止”状态,仅手动激活后才能运行。
内容的提问来源于stack exchange,提问作者msalvalaggio
相关产品推荐
相关产品推荐

