事件 - htmx:historyCacheError

htmx:historyCacheError 是 HTMX 在处理浏览器的前进/后退操作(历史还原)时,如果缓存失败(如找不到旧内容),会触发该事件。

你可以监听这个事件,以便:

  • 显示错误提示

  • 回退到安全页面

  • 重新发起请求加载内容

HTMX 内置了历史记录管理功能,当你使用 hx-push-url="true" 或 "replace",HTMX 会:

  • 使用 pushState() 或 replaceState() 改变 URL

  • 在内部缓存页面片段(默认是 hx-target 指向的元素内容)

  • 在用户点击“后退”时,从缓存中恢复内容并插入页面(触发 htmx:historyRestore)

如果缓存失败(如内存不足或页面被刷新后状态丢失),就会触发 htmx:historyCacheError。

事件参数

  • detail.cause - 尝试保存历史记录时抛出的 localStorage 异常

示例代码

<nav>
  <a href="/page1" hx-get="/page1" hx-target="#main" hx-push-url="true">页面1</a>
  <a href="/page2" hx-get="/page2" hx-target="#main" hx-push-url="true">页面2</a>
</nav>

<div id="main">
  <p>点击上面的链接以加载页面内容并修改地址栏。</p>
</div>

<script>
  document.body.addEventListener("htmx:historyCacheError", function(evt) {
    console.warn("历史缓存恢复失败,当前路径:", window.location.pathname);

    // 提示用户,或自动刷新页面
    document.getElementById("main").innerHTML = `
      <p style="color:red;">页面恢复失败,请 <a href="${window.location.pathname}">点击这里</a> 重新加载。</p>
    `;
  });
</script>