使用 sw-precache 缓存内部路由

Cache internal routes with sw-precache

我正在使用 vanilla JavaScript 创建一个 SPA,目前正在设置 sw-precache to handle the caching of resources. The service worker is generated as part of a gulp build and installed successfully. When I navigate to the root url (http://127.0.0.1:8080/),而离线应用程序 shell 显示,说明资源确实已缓存。

我现在正在尝试让软件在不失败的情况下处理内部路由。离线导航到 http://127.0.0.1:8080/dashboard_index 时,我收到消息“无法访问站点”。

应用程序通过用户操作的一系列事件侦听器在客户端处理此路由,或者在使用后退按钮的情况下,url。当访问这些 url 之一时,不应调用服务器。因此,service worker 应该允许这些指向 'fall through' 的链接到客户端代码。

我已经尝试了一些方法,预计 可以解决问题。我已经包含了 generate-service-worker gulp 任务的当前状态,并且通过此设置我希望能够离线访问 /dashboard_index。一旦这有效,我可以调整解决方案以涵盖其他路线。

非常感谢任何帮助。

gulp.task('generate-service-worker', function(callback) {
  var  rootDir = './public';

  swPrecache.write(path.join(rootDir, 'sw.js'), {
    staticFileGlobs: [rootDir + '/*/*.{js,html,png,jpg,gif,svg}',
                      rootDir + '/*.{js,html,png,jpg,gif,json}'],
    stripPrefix: rootDir,
    navigateFallback: '/',
    navigateFallbackWhitelist: [/\/dashboard_index/],
    runtimeCaching: [{
      urlPattern: /^http:\/\/127\.0\.0\.1\:8080/getAllData, // Req returns all data the app needs
      handler: 'networkFirst'
    }],
    verbose: true
  }, callback);
});

更新

可以找到应用程序的代码 here

删除选项 navigateFallbackWhitelist 不会改变结果。

离线时导航到 /dashboard_index 将以下内容打印到控制台。

在 chrome 调试工具的 'application > service workers' 选项卡中也复制了相同的 An unknown error occurred when fetching the script.

还注意到 runtimeCaching 选项不缓存从该路由返回的 json 响应。

郑重声明,以防其他人遇到此问题,我相信这个答案 应该可以解决问题:

Can you switch from navigateFallback: '/' to navigateFallback: '/index.html'? You don't have an entry for '/' in your list of precached resources, but you do have an entry for '/index.html'. There's some logic in place to automatically treat '/' and '/index.html' as being equivalent, but that doesn't apply to what navigateFallback is doing...