во-первых, я не могу понять, для чего нужен первый параметр в функции 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"?