使用pushState()/ onpopstate时,页面不会通过'back'重新加载

时间:2011-10-25 11:40:14

标签: javascript html5 pushstate

我正在使用AJAX刷新一些页面,因此使用以下代码更新历史记录 -

/** Update the page history */
var pushState_object = {
    ajax_string: ajax_string,
    security: security,
};
window.history.pushState(pushState_object, title, permalink);

然后我在页面加载时调用这个onPopState函数 -

window.onpopstate = function(e){
    if(window.history.state !== null){
        initiate_load_updated_page(window.history.state.ajax_string, window.history.state.security, 0)
    }
}

虽然从通过AJAX生成内容的页面转到以常规方式加载的页面时使用后退按钮,但我遇到了一些问题。 URL将更改,但页面将不会重新加载。如我所料,再次单击返回会将我带到页面,然后继续正常工作 - 这只是后退按钮不起作用的一种情况。

这里的任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:17)

初始状态没有可用的.state属性,因为您没有使用.pushState添加此类数据(按照您的描述以正常方式加载)。

但您知道的是,如果没有.state,则必须是原始状态,因此您可以使用else块,如下所示:http://jsfiddle.net/pimvdb/CCgDn/1/

最后,您可以使用e.state

window.onpopstate = function(e){
    if(e.state !== null) { // state data available
        // load the page using state data
        initiate_load_updated_page(e.state.ajax_string, window.history.state.security, 0);

    } else { // no state data available
        // load initial page which was there at first page load
    }
}