此问题的解决方法是将服务工作器中的缓存策略更改为"缓存优先"模式,以便在应用程序离线时仍然能够通过先前缓存的数据工作。下面是一些示例代码,可以帮助您实现这个〔
// 在服务工作器中使用缓存优先策略 var cacheFirst = new CacheFirst { // 在一定时间内重新验证缓存项(这里设置为2分钟) // 如果之前的响应时间小于2分钟,缓存将不会更新 Expiration = TimeSpan.FromMinutes(2) };
// 将缓存策略应用于API响应 // 在这个例子中,我们使用fetch来获取API响应 self.addEventListener('fetch', event => { if(event.request.url.startsWith('https://api.example.com')) { event.respondWith( caches.match(event.request).then(cachedResponse => { // 如果有已缓存的响应,直接使用 if (cachedResponse) { return cachedResponse; }
// 否则,获取API响应并缓存它
return fetch(event.request).then(response => {
// 克隆响应以避免意外关闭它
const clonedResponse = response.clone();
// 通过缓存策略缓存响应
cacheFirst.put(event.request, clonedResponse);
// 返回响应
return response;
});
})
);
}
});
// 在服务工作器中使用缓存优先策略 var cacheFirst = new CacheFirst { // 在一定时间内重新验证缓存项(这里设置为2分钟) // 如果之前的响应时间小于2分钟,缓存将不会更新 Expiration = TimeSpan.FromMinutes(2) };
// 将缓存策略应用于API响应 // 在这个例子中,我们使用fetch来获取API响应 self.addEventListener('fetch', event => { if(event.request.url.startsWith('https://api.example.com')) { event.respondWith( caches.match(event.request).then(cachedResponse => { // 如果有已缓存的响应,直接使用 if (cachedResponse) { return cachedResponse; }
// 否则,获取API响应并缓存它
return fetch(event.request).then(response => {
// 克隆响应以避免意外关闭它
const clonedResponse = response.clone();
// 通过缓存策略缓存响应
cacheFirst.put(event.request, clonedResponse);
// 返回响应
return response;
});
})
);
}
});