小编Car*_*son的帖子

Service Worker (Workbox) 不会在重新加载时将路由委托给我们的 SPA

我们正在为工作中的内部应用程序构建 SPA,特别是我们正在构建一个应该离线优先的 PWA。

目前,当有人从路线重新加载页面时,我们做得很好/。但任何其他途径都会导致应用程序过时,我不知道为什么。

在我们的 Service Worker 中,我们只有

importScripts("/precache-manifest.cce3b8ef68b2862904ee55d44aac3447.js", "https://storage.googleapis.com/workbox-cdn/releases/3.6.3/workbox-sw.js");

workbox.precaching.precacheAndRoute(self.__precacheManifest || []);
Run Code Online (Sandbox Code Playgroud)

然后是用于将本地工作推送到后端的同步脚本。

在 SPA 本身中,我们使用react和react-router。在应用程序的根目录中,我们有以下路由:

<Switch>
  <Route path="/_utils" component={DexUtils} />
  <Route path="/callback" component={Callback} />
  <Route exact path="/login" component={loginHandler} />
  <Route path="/" component={App} />
</Switch>
Run Code Online (Sandbox Code Playgroud)

因此,最后一条路线应该捕获除其他 3 条路线之一之外的任何内容。

如果我没记错的话,服务人员应该可以正常工作,但就像我说的,每次我们从不是 的路线重新加载页面时,/我们都会失去连接,并且应用程序将变得无法使用,直到您导航回/。

编辑:这是服务工作者注册脚本:

/* eslint-disable */
// In production, we register a service worker to serve assets from local cache.

// This lets the app load faster on subsequent visits in …
Run Code Online (Sandbox Code Playgroud)

single-page-application reactjs react-router progressive-web-apps workbox

5
推荐指数
2
解决办法
4622
查看次数