Страница не перезагружается через «назад» при использовании pushState () / onpopstate - PullRequest
17 голосов
/ 25 октября 2011

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

17 голосов
/ 25 октября 2011

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