PushState和ReplaceState导致浏览器后退按钮出错

时间:2016-05-06 19:20:54

标签: javascript browser-history pushstate window.location popstate

我正在调试大量的javascript,并且无法确定浏览器后退按钮的内容,因为它与pushState()和replaceState()有关。我有以下原型方法:

    SolrUrl.prototype.storeQueryObject = function(data) {

    var newUrl = window.location.protocol
        + "//"
        + window.location.host
        + window.location.pathname
        + "?"
        + $.param(data);

    // window.history.pushState(newUrl);

    window.history.pushState({
        path: newUrl
    }, "", newUrl);
};

我有一个分面搜索,允许我进行多级过滤。以上工作原理允许我过滤不同的查询,并使用后退按钮返回到以前的过滤器,但我无法使用浏览器'返回'按钮一旦我回到搜索的初始状态。例如,如果我去google.com - > mysite.com - >然后将我的搜索过滤到"组件",我可以使用后退按钮返回到mysite.com的初始状态,但不能使用它返回google.com。

我可以通过将pushState更改为replaceState来部分解决此问题,但这不允许我使用后退按钮返回过滤器状态。例如,在上面的函数中使用replaceState时。如果我去google.com - > mysite.com - >过滤器"组件" - >过滤器 - > "组件类型"并点击后退按钮,它将我带回mysite.com。我究竟做错了什么?如何让浏览器的后退按钮返回过滤器状态以及之前的网址?

0 个答案:

没有答案