javascript - 如果有新版本,我如何强制 SPA 客户端硬刷新?

标签 javascript single-page-application progressive-web-apps

我有一个单页应用程序,需要客户端使用最新版本。缓存是激进的,因此等待它们失效是不可行的。

有没有办法告诉客户端查看资源(比如说 build.txt 之类的东西),如果该资源包含的内部版本号大于当前加载的内部版本号,则使缓存无效并刷新?

最佳答案

由于这个问题已被标记为 progressive-web-apps 我将假设它正在安装一个 service-worker,它正在积极缓存资源。

This post通过为 PWA 显示“可用的新版本”弹出窗口来运行 - 即使这不是您想要的特定行为,它也解释了很多关于服务工作人员如何更新的信息。

This question/answer还讨论了服务工作人员检查更新的频率。

This question/answer回顾始终使用 skipWaiting 让客户端立即保持最新状态的优缺点。

编辑:如果您只是处理常规的 HTTP 缓存,请尝试使用 location.reload(true) (重新加载 forcedReload 标志集)当您检测到服务器上有更新的版本时。过去,我通过在构建/发布时将发布号放入 js 代码中,并让服务器将其发布号作为 header 添加到每个响应中来完成此操作。 ajax 调用后的值的简单比较可以确认 ui 和服务器版本号是否匹配,并在不匹配时采取措施。

关于javascript - 如果有新版本,我如何强制 SPA 客户端硬刷新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56370212/

相关文章:

html - 专注于固定元素和单页全屏布局的 CSS 网格/布局框架

reactjs - 应用程序未运行时 PWA 推送通知不显示

php - 获取DIV的内容并保存到文件,jQuery/JS或服务器端

node.js - React/Vue(或任何其他类似框架)MPA 实现

javascript - AngularJS 路线

ios - iOS 11.3 的网络推送通知

android - 以内部应用测试员身份登录时,在 Google Play 应用上找不到 URL

javascript - 是否可以在没有目标的方法上使用 dojo 方面?

javascript - 为什么我的 Jquery 事件不会在 focusout() 上触发?

javascript - 为什么 Canvas 上的画线没有出现?