first off Nie mogę określić, do czego służy pierwszy parametr funkcji pushState? Co mam przekazać? Po prostu chcę zmienić adres URL podczas przewijania strony. Pytam identyfikator bieżącego elementu w oknie roboczym, a jego identyfikator powinien również być linkiem w adresie URL. Działa to dobrze z poniższym kodem.HTML5/jQuery: pushState i popState - głęboki link?
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;
});
}
Teraz mam dwa pytania:
1.) Teraz adres URL w pasku adresowym zmiana stanu powodzeniem kiedy przewijać mojej stronie. Jak mogę zapytać adres URL/hash na pasku adresu, gdy początkowo ładuję stronę. Więc wyobraź sobie, że mam teraz link taki jak www.url.com/deep
Chcę się dowiedzieć, co/gdzie jest głęboki? Czy po prostu muszę przesłać zapytanie do całej witryny top.location i podzielić ją na "/"? Mam na myśli, że te linki w rzeczywistości nie istnieją, więc jak mogę uniknąć 404 stron podczas wywoływania adresu URL, który zmanipulowałem za pomocą funkcji pushState?
2.) Jak mogę znaleźć ostatnią zmianę na pasku adresu po kliknięciu przycisku Wstecz? Więc chcę znaleźć /deep
po kliknięciu przycisku wstecz przeglądarki, aby móc wrócić do tej pozycji na stronie. Myślę, że to prawdopodobnie działa z Popstate, ale nie mogłem dowiedzieć się, jak!
Dziękuję za pomoc!
Aktualizacja:
window.history.pushState("test", hash, url);
...
$(window).bind('popstate', function(event){
console.log(event.data);
});
to sprecyzowane zerowa. Czy nie powinieneś tego "testu" zwrócić?
'event.state' nie' event.data' – Quentin
Tak, próbowałem, ale nie ma '' event.state' kiedy konsola .log (event); 'Istnieją tylko dane, jednak dane zawsze mają zawsze wartość" null "i jeśli próbuję zalogować' event.state', to zawsze ma on wartość zerową! – matt
Ok, znalazłem rozwiązanie ... wydaje się, że '$ (okno) .bind ('popstate', funkcja (zdarzenie) {' nie działa, ale 'window.onpopstate = funkcja (zdarzenie) {' does! – matt