使用javascript更新浏览器缓存

使用javascript更新浏览器缓存,javascript,browser-cache,browser-history,Javascript,Browser Cache,Browser History,我的web应用程序通过javascript异步呈现。问题是浏览器缓存页面的一个版本,然后在我操作DOM时不更新缓存。然后,当我单击后退或前进按钮时,浏览器将加载网页的缓存版本,而不是最终版本 我的补丁程序是每当popstate事件触发时强制重新加载页面 window.addEventListener('popstate', () => window.location.reload()) 但这种解决方案显著降低了页面负载 我想知道是否有一种方法可以在我操作DOM时强制更新浏览器缓存。比如:

我的web应用程序通过javascript异步呈现。问题是浏览器缓存页面的一个版本,然后在我操作DOM时不更新缓存。然后,当我单击后退或前进按钮时,浏览器将加载网页的缓存版本,而不是最终版本

我的补丁程序是每当popstate事件触发时强制重新加载页面

window.addEventListener('popstate', () => window.location.reload())
但这种解决方案显著降低了页面负载

我想知道是否有一种方法可以在我操作DOM时强制更新浏览器缓存。比如:

window.location.forceCacheUpdate()

我希望能够在不重新加载整个页面的情况下更新缓存

您可以在
会话存储
中存储更新后的HTML,然后在
窗口
加载
事件中或在发生导航时,使用本地存储的HTML替换静态HTML请求正文

<!DOCTYPE html>
<html>

<head>
</head>

<body>
  <div id="div"></div>
  <script>
    onload = () => {
      console.log(sessionStorage);
      const div = document.getElementById("div");
      if (sessionStorage.getItem('html') === null) {
        div.innerHTML = '<p>1</p>';
        sessionStorage.setItem('html', encodeURIComponent(div.innerHTML));
        setTimeout(() => { console.log('navigate'); history.back() }, 2000)
      } else {
        div.innerHTML = decodeURIComponent(sessionStorage.getItem('html'));
      }
      // do stuff
    }
  </script>
</body>

</html>

onload=()=>{
console.log(会话存储);
const div=document.getElementById(“div”);
if(sessionStorage.getItem('html')==null){
div.innerHTML=“1

”; setItem('html',encodeURIComponent(div.innerHTML)); setTimeout(()=>{console.log('navigate');history.back()},2000) }否则{ div.innerHTML=decodeURIComponent(sessionStorage.getItem('html')); } //做事 }
您还可以使用或
ServiceWorker
ServiceWorker


有关在
窗口
加载之间存储数据的一系列解决方案,请参阅

或者在这两种情况下,您都必须向脚本中添加额外的文本浏览器缓存HTML,而不是DOM。不幸的是,onload处理程序不会为后退/前进按钮启动。你知道历史记录加载时会触发的事件吗?@JeremyGottfried是附加到
onload
属性事件处理程序吗?