You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 02:16:05