事件 - htmx:pushedIntoHistory
htmx:pushedIntoHistory 是 HTMX 的一个事件,在页面触发了历史记录推入(pushState)时触发。
也就是说,当你使用了 hx-push-url="true" 或使用了 HX-Push_Url="some path"时,HTMX 在 AJAX 请求成功、并将新地址加入浏览器历史记录时,就会触发这个事件。
事件参数
- detail.path - 已推送到历史记录的 URL 的路径和查询
使用场景
-
在 URL 被推入浏览器历史栈时执行一些额外逻辑
-
自定义记录页面导航轨迹(比如用于打点或调试)
-
显示“你已进入 X 页面”的提示
-
与页面状态或标题联动(更新 <title>、面包屑导航等)
示例代码
<h2>产品列表</h2>
<ul>
<li><a href="/product/1" hx-get="/product/1" hx-target="#content" hx-push-url="true">DDOS防护</a></li>
<li><a href="/product/2" hx-get="/product/2" hx-target="#content" hx-push-url="true">云安全防护</a></li>
</ul>
<hr>
<div id="content">
<p>点击上方产品名称,加载详情并推入浏览器历史记录。</p>
</div>
<script>
document.body.addEventListener("htmx:pushedIntoHistory", function(evt) {
console.log("已将 URL 推入历史记录:", window.location.pathname);
// 可执行额外逻辑,比如修改标题
document.title = "当前页面:" + window.location.pathname;
});
</script>
用户点击“DDOS防护”,HTMX 发送请求,加载 /product/1 的内容到 #content。因为设置了 hx-push-url="true",HTMX 会执行 history.pushState()。浏览器地址栏会改变,不刷新页面。此时自动触发 htmx:pushedIntoHistory 事件,你可以在里面写自定义逻辑。