事件 - htmx:beforeHistoryUpdate

htmx:beforehistoryupdate 是 HTMX 中一个高级事件,它在浏览器历史记录将被更新之前触发,允许你在该时刻查看或修改即将写入的历史状态(如更新历史记录的 path 或 type等)。

事件参数

  • detail.history - 用于历史更新的 path 和 type(push, replace)
  • detail.elt - 发送请求的元素
  • detail.xhr - XMLHttpRequest
  • detail.target - 请求的目标
  • detail.requestConfig - AJAX请求的配置

示例:监控并打印历史记录变化

<button 
  hx-get="/page1" 
  hx-push-url="true" 
  hx-target="#content"
>
  加载页面 1
</button>

<div id="content"></div>

<script>
  document.body.addEventListener("htmx:beforehistoryupdate", function (event) {
    console.log("即将更新历史记录:", event.detail);
    // 可以修改 URL 或状态对象:
    // event.detail.path = "/custom-path";
    // event.detail.state = { myCustomState: true };

    // 或取消 pushState 行为
    // event.preventDefault();
  });
</script>

示例:阻止某个页面进入历史记录

document.body.addEventListener("htmx:beforehistoryupdate", function (event) {
  if (event.detail.path === "/login") {
    event.preventDefault(); // 不写入浏览器历史
  }
});