Safari service worker使用自定义脱机页面时工作不正确

Safari service worker使用自定义脱机页面时工作不正确,safari,fetch,offline,service-worker,progressive-web-apps,Safari,Fetch,Offline,Service Worker,Progressive Web Apps,我使用服务人员创建了一个带有自定义脱机页面的pwa版本的站点。在页面中导航时,它们会被添加到缓存中,当再次访问它们时,会从缓存中显示出来。 当您单击链接但未连接到Internet且此页面未缓存时,将显示脱机页面 有两个选项可刷新页面: 当Internet出现在脱机页面上时,会显示一个链接 更新页面 当Internet出现时,返回任何可用页面(主页 页面)并转到所需页面 第一种选择没有问题。第二个问题是狩猎中的一个问题。 问题发生在以下情况: 在没有Internet连接的情况下单击链

我使用服务人员创建了一个带有自定义脱机页面的pwa版本的站点。在页面中导航时,它们会被添加到缓存中,当再次访问它们时,会从缓存中显示出来。 当您单击链接但未连接到Internet且此页面未缓存时,将显示脱机页面

有两个选项可刷新页面:

  • 当Internet出现在脱机页面上时,会显示一个链接 更新页面

  • 当Internet出现时,返回任何可用页面(主页
    页面)并转到所需页面

第一种选择没有问题。第二个问题是狩猎中的一个问题。 问题发生在以下情况:

  • 在没有Internet连接的情况下单击链接并收到 脱机页面
  • 下一次已经和互联网连接在一起了 链接并再次收到脱机页面,尽管它应该显示联机页面
  • 重现问题的步骤:

  • 在打开Internet的情况下访问站点
  • 关掉互联网
  • 转到page1.html(显示脱机页面)
  • 返回index.html(返回主页链接)
  • 打开互联网
  • 返回到page1.html(显示脱机页面,但不显示page1.html (应显示)
  • 转到page2.html-一切正常,在线页面加载
  • 谁面临这样的问题?似乎safari会记住请求-响应串并返回相同的结果,而不管与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的下一个版本中得到了修复,但没有检查。您在哪个浏览器版本中遇到此问题?