我根据current version的this tutorial编写了一个简单的PWA(Vaadin)。可以在Chrome浏览器中进行测试,也可以在离线模式下正常运行。
通过在移动设备上使用它,会出现问题:
我认为PWA有什么用?为什么不加载静态资产?我认为我的服务人员很好:
const staticAssets = [
'./',
'./styles.css',
'./app.js',
'./images',
'./fallback.json',
'./images/system/offline.png'
]
self.addEventListener('install', async event => {
const cache = await caches.open('static-assets');
cache.addAll(staticAssets);
});
self.addEventListener('fetch', event => {
const req = event.request;
const url = new URL(req.url);
if(url.origin === location.origin){
event.respondWith(cacheFirst(req));
}else{
event.respondWith(networkFirst(req));
}
});
async function cacheFirst(req){
const cachedResponse = await caches.match(req);
return cachedResponse || fetch(req);
}
async function networkFirst(req){
const cache = await caches.open('dynamic-content');
try{
const res = await fetch(req);
cache.put(req, res.clone());
return res;
}catch(err){
const cachedResponse = await cache.match(req);
return cachedResponse || caches.match('./fallback.json');
}
}
如果您认为问题出在其他地方,我很乐意分享更多代码!
答案 0 :(得分:0)
答案 1 :(得分:0)
我有同样的问题。就我而言,问题出在清单中,向start_url添加查询字符串。缓存对此很敏感。您可以在.match中添加一个参数以阻止它,例如:
caches.match(event.request, {ignoreSearch: true})