Per prima cosa non riesco a capire quale sia il primo parametro della funzione pushState? Che cosa passo ad esso? Voglio semplicemente cambiare l'url quando scorro la mia pagina. Sto interrogando l'ID dell'elemento corrente nel viewport e il suo ID dovrebbe essere anche il link nell'URL. Funziona bene con il codice qui sotto.HTML5/jQuery: pushState e popState - deep linking?
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;
});
}
Ora ho due domande:
1.) In questo momento l'URL nella AddressBar cambia con successo quando ho scorrere la mia pagina. Come posso interrogare l'url/hash nella barra degli indirizzi quando carico inizialmente la pagina. Quindi immagino di avere ora un link come www.url.com/deep
Voglio scoprire che cosa è/deep? Devo semplicemente interrogare l'intera top.location e dividerla su ogni "/"? Voglio dire che quei collegamenti non sono effettivamente esistenti, quindi come faccio a evitare 404 pagine quando si chiama un URL che ho manipolato con la funzione pushState?
2.) Come posso trovare l'ultima modifica nella barra degli indirizzi quando si fa clic sul pulsante Indietro? Quindi voglio trovare /deep
quando si fa clic sul pulsante Indietro del browser in modo da poter tornare a quella posizione sulla pagina. Immagino che probabilmente stia lavorando con popstate ma non riesco a scoprire come!
Grazie per il vostro aiuto!
Aggiornamento:
window.history.pushState("test", hash, url);
...
$(window).bind('popstate', function(event){
console.log(event.data);
});
Questo e 'sempre nullo. Non dovrebbe questo "test" di ritorno?
'' non event.state' event.data' – Quentin
Sì, ho provato, ma non c'è 'event.state' quando' console .log (evento); 'Ci sono solo dati, tuttavia anche i dati sono sempre" null "e se provo a registrare' event.state' è sempre nullo! – matt
Ok, ho trovato la soluzione ... sembra come '$ (window) .bind ('popstate', function (event) {' non funziona ma 'window.onpopstate = function (event) {' does! – matt