Safari service worker使用自定义脱机页面时工作不正确
我使用服务人员创建了一个带有自定义脱机页面的pwa版本的站点。在页面中导航时,它们会被添加到缓存中,当再次访问它们时,会从缓存中显示出来。 当您单击链接但未连接到Internet且此页面未缓存时,将显示脱机页面 有两个选项可刷新页面:Safari service worker使用自定义脱机页面时工作不正确,safari,fetch,offline,service-worker,progressive-web-apps,Safari,Fetch,Offline,Service Worker,Progressive Web Apps,我使用服务人员创建了一个带有自定义脱机页面的pwa版本的站点。在页面中导航时,它们会被添加到缓存中,当再次访问它们时,会从缓存中显示出来。 当您单击链接但未连接到Internet且此页面未缓存时,将显示脱机页面 有两个选项可刷新页面: 当Internet出现在脱机页面上时,会显示一个链接 更新页面 当Internet出现时,返回任何可用页面(主页 页面)并转到所需页面 第一种选择没有问题。第二个问题是狩猎中的一个问题。 问题发生在以下情况: 在没有Internet连接的情况下单击链
- 当Internet出现在脱机页面上时,会显示一个链接 更新页面
- 当Internet出现时,返回任何可用页面(主页
页面)并转到所需页面
“严格使用”;
const CACHE_VERSION=1;
常量BASE_URL=location.origin+'/';
const OFFLINE_URL='/OFFLINE.html';
常量当前缓存={
脱机:“脱机-v”+缓存_版本,
};
常量URL\u到\u缓存=[
基本URL,
离线链接,
];
self.addEventListener('install',事件=>{
event.waitill(
缓存。打开(当前缓存。脱机)
。然后(缓存=>{
返回cache.addAll(URL\u到\u缓存);
})
.然后(()=>{
返回self.skipWaiting()
})
);
});
self.addEventListener('activate',event=>{
让expectedCacheNames=Object.keys(当前缓存).map(函数(键){
返回当前_缓存[键];
});
event.waitill(
caches.keys().then(cacheNames=>{
回报你的承诺(
cacheNames.map(cacheName=>{
if(expectedCacheNames.indexOf(cacheName)=-1){
返回缓存。删除(缓存名称);
}
})
);
})
.然后(()=>{
返回self.clients.claim()
})
);
});
//获取请求
self.addEventListener('fetch',event=>{
const responsePromiseFactory=()=>{
返回缓存。打开(当前缓存。脱机)。然后((缓存)=>{
返回cache.match(event.request)。然后返回(response=>{
如果(答复){
返回响应;
}
const fetchRequest=event.request.clone();
返回获取(获取请求)
。然后(响应=>{
const responseToCache=response.clone();
如果(!response | | response.status!==200 | | response.type!=='basic'){
返回响应;
}
cache.put(event.request,responseToCache)
返回响应;
})
})
})
.catch(错误=>{
返回缓存。匹配(脱机\u URL)
})
};
event.respondWith(responsePromiseFactory());
});代码>我遇到了完全相同的情况,通过在离线页面中添加以下标题,Safari现在可以在互联网连接可用时为在线页面提供服务
请在此处张贴代码,而不是GitHub@Dani添加代码你找到解决方案了吗?我的软件在离线时适用于Safari桌面,但在iOS上似乎不起作用。。。(顺便说一句——如此可怜的浏览器)@ohladkov我只在Safari中面临着完全相同的问题。我的软件在其他浏览器中运行良好。你找到解决办法了吗?@Philippe没有找到任何解决办法。也许这在safari的下一个版本中得到了修复,但没有检查。您在哪个浏览器版本中遇到此问题?