在浏览器中防止哈希导航

时间:2016-07-13 16:37:26

标签: javascript single-page-application browser-history

我实施路由器以在单页面应用程序中导航(类似于Angular' s ui-router)。路由将通过更改浏览器位置的哈希来完成。

导航到未申报的路线应该是不可能的。因此,如果我仅宣布#/foo路由,并且目前我正在#/foo并尝试将哈希值更改为#/bar,则浏览器应将哈希值恢复为#/foo }。

但是,之后#/bar将保留在浏览器的历史记录中。问题是:如何完全防止哈希导航中的历史变化?

我已经尝试了

$(window).on('hashchange', function(event) {
    event.preventDefault();
    return false;
})

但它没有用。

1 个答案:

答案 0 :(得分:0)

这已经得到了解答。您可以使用onpopstate事件来检测用户何时向前/向后命中,但您需要包装pushState和replaceState方法以检测它们何时被使用。示例如下所示:How to detect when history.pushState and history.replaceState are used?