我们正在为工作中的内部应用程序构建 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