сначала я не могу понять, для чего предназначен первый параметр в функции pushState? Что я на это перейду? Я просто хочу изменить URL при прокрутке моей страницы. Я запрашиваю идентификатор текущего элемента в окне просмотра, и его идентификатор также должен быть ссылкой в 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 / хэш в адресной строке при первоначальной загрузке страницы. Итак, представьте, что теперь у меня есть ссылка типа 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);
});
Это всегда ноль. Разве это не должно возвращать «тест»?