Кнопка возврата History.JS не совсем работает для первой страницы

Я использую history.js для изменения URL-адреса страницы с помощью pushState при изменении содержимого с помощью ajax.

Моя проблема в том, что начальная страница, на которую я перехожу, не работает с кнопкой назад. Содержимое не сохраняется или информация, которую я использовал для получения содержимого, не сохраняется.

Если я вызываю pushState при инициализации, это работает, но тогда у меня каким-то образом есть две записи на этой странице. Поэтому, когда я наношу ответный удар, мне приходится наносить ответный удар снова, чтобы попасть на главную страницу, с которой я пришел. Не знаю, имеет это смысл или нет. Кажется, я не нашел здесь ничего, относящегося к моему конкретному делу.

$(function() {
    var History = window.History; 
    if ( !History.enabled ) {
        return false;
    }
    if($.url().attr('fragment')){
        var url = $.url().attr('fragment').split("-");
    }else{
        var url = $.url().attr('path').split("-");
    }

    photo_ajax(url[3],url[2],url[4]); //perform ajax content update

    //initialize first page but doesn't quite work as it creates two entries
    //History.pushState({pho_id:url[3],per_id:url[2],a_id:url[4]}, "Viewing Photo", $.url().attr('path')); 

    History.Adapter.bind(window,'statechange',function() {
        var State = History.getState();
        photo_ajax(State.data.pho_id,State.data.per_id,State.data.a_id);
    });
});


$(document).ready(function(){  
    $(document).on('click', '[id^="dopho_"]', function(event){
        var id = $(this).attr("id").split('_');
        event.preventDefault();
        History.pushState({pho_id:id[1],per_id:id[2],a_id:id[3]}, "Viewing Photo", $(this).attr('href'));
    });
});

person Panama Jack    schedule 04.03.2013    source источник


Ответы (1)


Ну, я понял кое-что, что действительно работает. Если вместо этого я использую replaceState, то строка инициализации работает, и двойной записи, похоже, не происходит. Так что я пойду с этим сейчас.

$(function() {
        var History = window.History; 
        if ( !History.enabled ) {
            return false;
        }
        if($.url().attr('fragment')){
            var url = $.url().attr('fragment').split("-");
        }else{
            var url = $.url().attr('path').split("-");
        }

        photo_ajax(url[3],url[2],url[4]); //perform ajax content update

        //initialize first page but doesn't quite work as it creates two entries
        History.replaceState({pho_id:url[3],per_id:url[2],a_id:url[4]}, "Viewing Photo", $.url().attr('path')); 

        History.Adapter.bind(window,'statechange',function() {
            var State = History.getState();
            photo_ajax(State.data.pho_id,State.data.per_id,State.data.a_id);
        });
    });


    $(document).ready(function(){  
        $(document).on('click', '[id^="dopho_"]', function(event){
            var id = $(this).attr("id").split('_');
            event.preventDefault();
            History.pushState({pho_id:id[1],per_id:id[2],a_id:id[3]}, "Viewing Photo", $(this).attr('href'));
        });
    });
person Panama Jack    schedule 06.03.2013