PWA离线缓存为什么没生效?
我按照教程给项目加了 Service Worker 和 Cache API,但刷新页面后还是没法离线访问,控制台也没报错,到底哪里出问题了?
我注册了 sw.js,在 install 事件里缓存了首页和关键资源,但断网后再打开页面就直接显示“无网络连接”,而不是加载缓存的内容。
self.addEventListener('install', (event) => {
event.waitUntil(
caches.open('v1').then((cache) => {
return cache.addAll([
'/',
'/index.html',
'/styles/main.css',
'/scripts/app.js'
]);
})
);
});
路径应该没错,本地开发时用的是 http-server 启的,不是 file:// 协议。是不是 fetch 事件没处理?但我以为 install 缓存了就能自动用……
Service Worker 的 install 事件只是负责把资源缓存起来,但它不会自动拦截请求并从缓存里返回。你需要在 fetch 事件里显式地告诉浏览器:“遇到请求时,先看看缓存里有没有,有就直接用缓存,没有再去网络请求”。
你的代码缺的就是这部分: