我必须维护一个带有 AJAX 搜索表单的站点(例如书籍),并且我希望搜索结果成为浏览器历史记录的一部分。
所以我设置了“popstate”事件处理程序
window.addEventListener('popstate', function(e) {
alert("popstate: " + JSON.stringify(e.state));
});
Run Code Online (Sandbox Code Playgroud)
并在成功的 AJAX 请求后调用pushState():
var stateObj = { q: "harry potter" };
window.history.pushState(stateObj, "Result", "/search");
Run Code Online (Sandbox Code Playgroud)
然后我的点击流是:
当我再回去一次时,我收到一条警告,其中popstate: null -路径更改为 /
当我在那之后继续前进时,我得到popstate: {"q":"harry potter"} -路径更改为 /search
因此,重要的 popstate 事件(带有查询字符串的事件)仅在前进时触发,而在返回时不会触发。
这是因为我从一个站点导航回来,它的历史条目是自动创建的,而不是由 pushState 以编程方式创建的?但如果是这样,History API …