我正在使用 vanilla JavaScript 创建一个 SPA,目前正在设置sw-precache来处理资源的缓存。服务工作者作为gulp
构建的一部分生成并成功安装。当我在离线时导航到根 url ( http://127.0.0.1:8080/ ) 时,应用程序外壳会显示,说明资源确实被缓存了。
我现在正试图让 SW 处理内部路由而不会失败。当导航到http://127.0.0.1:8080/dashboard_index
离线时,我收到消息“无法访问站点”。
该应用程序通过用户操作上的一系列事件侦听器在客户端处理此路由,或者在使用后退按钮的情况下,通过 url。访问这些 url 之一时,不应调用服务器。因此,服务工作者应该允许这些链接“通过”到客户端代码。
我已经尝试了一些事情,并希望这个 Q/A能够解决问题。我已经包含了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);
});
更新
应用程序的代码可以在这里找到。
删除该选项navigateFallbackWhitelist
不会改变结果。
脱机时导航到/dashboard_index
将以下内容打印到控制台。
- 获取http://127.0.0.1:8080/dashboard_index网络::ERR_CONNECTION_REFUSED
- sw.js:1 获取脚本时发生未知错误。
- http://127.0.0.1:8080/sw.js加载资源失败:net::ERR_CONNECTION_REFUSED
An unknown error occurred when fetching the script.
在 chrome 调试工具的“应用程序 > 服务人员”选项卡中也有相同的内容。
还注意到该runtimeCaching
选项不缓存从该路由返回的 json 响应。