【发布时间】:2020-06-19 14:44:39
【问题描述】:
我有一个 webapp,它使用一个 service worker 来检测网络何时离线,并提供一个缓存的离线页面。
我有一个案例:
- 程序启动,同时网络连接,加载urlhttps://localhost/my_site
- 用户按下按钮触发获取调用
- 在此期间,网络断开,
- Service Worker 检测到此状态并返回缓存的离线页面
- javascript 代码检查响应内容类型,发现它是 text/html(而不是应该是例如 application/json 的原始响应)
- javascript 代码呈现离线页面(通过设置“window.location.href = response.url”)。离线网址为https://localhost/static/offline/offline.html
- 此时站点地址栏显示离线url。
我希望用户在重新连接网络后刷新页面(例如按 F5)以重新加载原始内容。
但是因为地址栏现在显示的是离线url,刷新页面只会一次又一次地重新加载离线页面。
用户怎样才能回到原来的url:https://localhost/my_site?
谢谢,
阿夫纳
编辑:
为什么不将服务工作者的离线页面作为 localhost/my_site 提供服务
这可能发生在不同的页面上。您将如何以编程方式更改 response.url?
我尝试使用基于here的解决方案。
当 fetch 返回时,我会检查响应类型。
如果是 text/html 我从响应中加载新页面,然后
使用:
window.history.pushState({"html":response.html,"pageTitle":response.pageTitle},"", queryUrl1);
设置url,但它只改变历史中的url,而不是当前呈现的url...
【问题讨论】:
-
为什么不将服务工作者的离线页面作为
localhost/my_site提供? -
在恢复连接时,我们不能用 window.location.href 将 url 改回来吗?
-
@FZs 我编辑了我的问题。您将如何以编程方式执行此操作?