HTML5/jQuery: pushState и popState - глубокая привязка?

во-первых, я не могу понять, для чего нужен первый параметр в функции pushState? Что я должен передать ему? Я просто хочу изменить url при прокрутке страницы. Я запрашиваю ID текущего элемента в области просмотра, и его ID также должен быть ссылкой в url. Это прекрасно работает с приведенным ниже кодом.

var currentHash,
        url;

    if (history && history.pushState) {

        $(window).scroll(function() {
            hash = $('.layer:in-viewport').attr('id');
            catHash = $("#"+hash).parent('section').attr('id');

            var data = "nothing";

            if ( catHash != undefined )
                url = "/" + catHash + "/" + hash;
            else
                url = "/" + hash;

            if ( currentHash != hash ) {

                window.history.pushState(data, hash, url);

            }

            currentHash = hash;

        });

    }

Теперь у меня два вопроса:

1.) Сейчас url в адресной строке успешно меняется, когда я прокручиваю страницу. Как я могу запросить url/hash в адресной строке при первоначальной загрузке страницы. Представьте, что у меня есть ссылка типа www.url.com/deep Я хочу узнать, что такое /deep? Должен ли я просто запросить весь top.location и разделить его на все "/"? Я имею в виду, что эти ссылки на самом деле не существуют, так как же мне избежать 404 страницы при вызове url, которым я манипулировал с помощью функции pushState?

2.) Как узнать последнее изменение в адресной строке при нажатии кнопки "Назад"? То есть я хочу найти /deep при нажатии на кнопку назад в браузере, чтобы я мог перейти назад к этой позиции на странице. Я предполагаю, что это, вероятно, работает с popstate, но я не смог найти как!

Спасибо за помощь!

Обновление:

window.history.pushState("test", hash, url);

...

$(window).bind('popstate', function(event){
        console.log(event.data);
    });

Это всегда null. Разве это не должно возвращать "test"?

6
задан matt 8 January 2012 в 10:08
поделиться