primero apagado Parece que no puedo imaginar para qué sirve el primer parámetro en la función pushState? ¿Qué paso a eso? Simplemente quiero cambiar la URL cuando se desplaza por mi página. Estoy consultando el ID del elemento actual en la ventana gráfica y su ID también debería ser el enlace en la url. Eso funciona bien con el código a continuación.HTML5/jQuery: pushState y popState - ¿enlace profundo?
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;
});
}
Ahora tengo dos preguntas:
1.) En este momento la dirección URL en el addressbar cambios con éxito cuando me desplazo a través de mi página. ¿Cómo puedo consultar el url/hash en la barra de direcciones cuando inicialmente cargo la página? Entonces imagina que tengo un enlace como www.url.com/deep
. ¿Quiero saber qué/profundo es? ¿Simplemente tengo que consultar la top.location completa y dividirla en cada "/"? Quiero decir que esos enlaces en realidad no existen, entonces, ¿cómo evito las 404 páginas cuando llamo a una url que manipulé con la función pushState?
2.) ¿Cómo puedo averiguar el último cambio en la barra de direcciones al hacer clic en el botón Atrás? Así que quiero encontrar /deep
al hacer clic en el botón Atrás del navegador para poder volver a esa posición en la página. ¡Supongo que esto probablemente funciona con popstate, pero no pude averiguar cómo!
¡Gracias por tu ayuda!
Actualización:
window.history.pushState("test", hash, url);
...
$(window).bind('popstate', function(event){
console.log(event.data);
});
Esto es todos los días nula. ¿No debería esto devolver la "prueba"?
'' no event.state' event.data' – Quentin
Sí, lo he intentado, pero no hay '' event.state' cuando la consola .log (evento); 'Solo hay datos; sin embargo, los datos siempre son" nulos "y si intento registrar' event.state', ¡siempre será nulo! – matt
Ok, encontré la solución ... parece como '$ (ventana) .bind ('popstate', función (evento) {' no funciona pero 'window.onpopstate = function (event) {' does! – matt