Страница не перезагружается через "назад" при использовании 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
}
}