javascript - 停止在 hashchange 上触发 popstate

标签 javascript html5-history

我正在使用 History API 并使用推送和弹出状态。我想在某些情况下停止触发 popstate 事件,我只将哈希附加到 URL。例如在某些情况下点击 anchor 它会将 # 附加到 URL 并立即触发 popstate)我想避免所有 ##somehasvalue 的场景 附加到 URL 并阻止 popstate 触发。我正在使用查询参数维护 URL,并且我没有任何需要在 URL 中使用 # 触发 popstate 事件的场景。

这是我的代码。

if (supportsHistoryApi()) {

    window.onpopstate = function (event) {
    var d = event.state || {state_param1: param1, state_param2: param2};                       
    var pathName = window.location.pathname,
        params   = window.location.search;

    loadData(event, pathName + params, d.state_param1, d.state_param2);

}

最佳答案

据我所知,不幸的是你无法阻止 popstate 触发。

您可以做的是检查 event.state 对象。这将在哈希更改时为 null。 所以我建议添加一个

if(event.state === null) {
   event.preventDefault();
   return false;
}

在一开始就给你的 popstate 事件处理程序。 我认为这是防止在散列更改时触发 popstate 处理代码的最佳方法,但我很想知道是否还有其他解决方案。

关于javascript - 停止在 hashchange 上触发 popstate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25634422/

相关文章:

javascript - 如何检测是否在页面加载的第一个 url 上?

javascript - Tinymce 添加文件选择器按钮以添加链接

javascript - ReduxReducer - 根据 id 过滤数组,然后更改键/值对

javascript - 如何将缩略图裁剪成 1 :1 size instead of adapting to the image size

javascript - Jquery tablesorter 过滤器和 ajax 分页器

javascript - 不支持 history.pushState 的标题,什么是好的选择?

Javascript history api - window.history.forward() 可用性

java - 在 selenium Ghost 驱动程序中嵌入用于解析和单击网页的 javascript

javascript - 历史 pushState 和滚动位置

javascript - 使用 Angular 2 跳过浏览器历史记录中的跳转链接