Подтвердить что ты не робот

History.pushstate не работает кнопка назад и вперед браузера

Я использую jQuery для динамической загрузки содержимого в контейнер div.

Код на стороне сервера определяет, является ли запрос AJAX или GET.

Я хочу, чтобы кнопки браузера назад/вперед работали с кодом, поэтому я пытаюсь использовать history.pushState. Мне нужно следовать фрагменту кода:

$('.ajax').on('click', function(e) {
    e.preventDefault();
    $this = $(this);
    $('#ajaxContent').fadeOut(function() {
        $('.pageLoad').show();
        $('#ajaxContent').html('');
        $('#ajaxContent').load($this.attr('href'), function() {
            window.history.pushState(null,"", $this.attr('href'));
            $('.pageLoad').hide();
            $('#ajaxContent').fadeIn();
        });
    });
});

Все работает отлично, за исключением того, что при просмотре с помощью кнопки назад/вперед браузера адрес в строке изменяется в соответствии с планом, но страница не изменяется. Что я делаю неправильно?

Обновлен script с помощью ответа Clayton

var fnLoadPage = function(url) {
    $('#ajaxContent').fadeOut(function() {
        $('.pageLoad').show();
        $('#ajaxContent').html('').load(url, function() {
            $('.pageLoad').hide();
            $('#ajaxContent').fadeIn();
        });
     });
};

window.onpopstate = function(e) {
     fnLoadPage.call(undefined, document.location.href);
};

$(document).on('click', '.ajax', function(e) {
    $this = $(this);
    e.preventDefault();
    window.history.pushState({state: new Date().getTime()}, '', $this.attr('href'));
    fnLoadPage.call(undefined, $this.attr('href'));
});
4b9b3361

Ответ 1

@Barry_127, посмотрите, будет ли это работать для вас: http://jsfiddle.net/SX4Qh/

$(document).ready(function(){
    window.onpopstate =  function(event) {
        alert('popstate fired');
        $('#ajaxContent').fadeOut(function() {
            $('.pageLoad').show();
            $('#ajaxContent').html('')
                             .load($(this).attr('href'), function() {
                                $('.pageLoad').hide();
                                $('#ajaxContent').fadeIn();
                             });
        });
    };

    $('.ajax').on('click', function(event) {
        event.preventDefault();
        alert('pushstate fired');
        window.history.pushState({state:'new'},'', $(this).attr('href'));
    });

 });

Если вы посмотрите на скрипку, которую я предоставил, и нажмите кнопку, появится предупреждение, показывающее, что вы нажимаете новое состояние. Если после этого нажать кнопку "Назад" после запуска pushstate, вы увидите, что будет срабатывать предыдущая страница (или popstate).