Estoy trabajando en un proyecto pequeño en el que quiero crear un sitio web de estilo Ajax. El contenido se carga con jQuery's load()
. Como algunos de ustedes saben, la desventaja de esto es que la URL no cambia de acuerdo con el contenido que se muestra. Para que esto funcione, puede usar pushState()
. Como esto no es compatible con varios navegadores, utilicé el complemento history.js
.pushState() y popState(): manipulando la historia de los navegadores
Esto está funcionando bastante bien, pero el problema es que mis botones de atrás y de adelante no funcionan como deberían y no tengo idea de lo que estoy haciendo mal. La URL está cambiando correctamente y el contenido también lo está, pero el título no cambia en absoluto. Con el título me refiero a lo que se muestra como título de la ventana (o pestaña) de la ventana del navegador. Es decir. el <title>
de la página que se carga O el atributo de título del enlace que hace referencia a esa página (son los mismos). Creo que tiene que ver con el hecho de que llamo solo a una sección de la página cuyo título necesito (es decir, agregando #content
al load()
). Aunque aún quiero el título de esa página. Aquí hay un caso de prueba de lo que tengo hasta ahora. (No está disponible ninguna de 2013. más desde el 28 de diciembre) archivo de jQuery:
$(document).ready(function() {
var firstLink = $("ul > li:first-child > a");
var menuLink = $("ul > li > a");
var firstLoadedHtml = firstLink.attr("href") + " #content";
$("#sectionContainer").hide().load(firstLoadedHtml).fadeIn("fast");
firstLink.addClass("active");
menuLink.click(function(e) {
history.pushState(null, null, this.href);
e.preventDefault();
e.stopImmediatePropagation();
var CurLink = $(this);
var newLoadedHtml = CurLink.attr("href") + " #content";
var oldSection = $(".contentPage");
$("#sectionContainer").hide().load(newLoadedHtml).fadeIn("fast");
menuLink.removeClass("active");
CurLink.addClass("active");
});
$(window).bind('popstate', function() {
var returnLocation = history.location || document.location;
$('#sectionContainer').load(returnLocation + "#content");
});
});
También he observado que cuando se va de nuevo a la página básica (es decir,/sectionLoaderTest /) se queda en blanco durante un tiempo y sólo después de un tiempo el contenido de la primera página está cargado. ¿Hay alguna forma de optimizar esto?
Además, estoy usando jQuery para agregar una clase activa al enlace que se ha hecho clic. ¿Cómo puedo asegurarme de que esto cambie de acuerdo con el historial? ¿Para que el enlace correcto se destaque cuando un usuario navega hacia atrás?
Así las tres preguntas son:
- Consigue el título de trabajo cuando se va hacia adelante y hacia atrás
- Optimizar el tiempo de carga de la MainPage
- Fije la clase activa cuando se va hacia adelante y hacia atrás
¡Toda ayuda es bienvenida!
NOTA 1: Me gustaría construir en history.js y mi propio script y, como tal, mantener la compatibilidad con los navegadores < HTML5
. Preferiría esto porque 1. Sé que esto tiene que funcionar, simplemente hay algo que está yendo mal. 2. Ahorraría tiempo si pudiera ver la solución e implementarla en el guión que ya escribí en lugar de encontrar un guión completamente nuevo.
NOTA 2: ¡La recompensa solo se le dará a él o ella que pueda responder todas mis preguntas (3)!
Todavía no está bien, vea un ejemplo de tales aquí http://stackoverflow.com/questions/6622449/why-is-history-pushstate-not-supported-in-ie-are-herehere-some -other-ways-to-ach/9470183 # 9470183 – devote
Su comentario no es realmente útil. No necesito implementar history.js (todavía), solo estoy tratando de entender qué está haciendo pushState por ahora. Quiero solucionar este problema. –
Mi comentario señala su error, cómo ubicar los métodos de procesamiento del evento.El método para interceptar el evento popstate, que ha publicado no es correcto, eliminarlo del método funciona cuando se hace clic. – devote