Страница не перезагружается через "назад" при использовании pushState()/onpopstate

Я обновляю некоторые страницы с помощью 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

Исходное состояние не имеет свойства .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
    }
}