Dado lo siguiente:
$(window).bind("popstate", function() { alert('popstate'); });En la primera carga, la alerta se activa con FireFox y Chrome, pero no con Safari. ¿Porqué es eso? ¿Alguien más ha visto esto y sabe cómo resolverlo mejor?
Ver el código de pjax. pjax es una biblioteca de código abierto bastante popular ahora, por lo que la siguiente lógica podría ser la mejor para evitar este problema.
var popped = ('state' in window.history), initialURL = location.href $(window).bind('popstate', function(event) { // Ignore inital popstate that some browsers fire on page load var initialPop = !popped && location.href == initialURL popped = true if ( initialPop ) return ...https://github.com/defunkt/jquery-pjax/blob/master/jquery.pjax.js
En webkit, el evento popstate se activa al cargar la página. Para evitar esto, este sencillo trabajo funciona para mí:
Cada vez que disparo history.push(...) agrego la class historypush al body -etiqueta:
history.push(...); $("body").addClass("historypushed");Cuando desencadeno el evento popstate, compruebo esta clase:
$(window).bind('popstate', function(e) { if($("body").hasClass("historypushed")) { /* my code */ } });La situación ahora es al revés. Chrome ha solucionado el error y ahora activa popstate en la carga de la página, pero Firefox 4 (desde RC) se ha apartado de la especificación y ahora no activa popstate .
ACTUALIZACIÓN : la especificación de HTML5 se cambió en 2011 para indicar que el estado pop no debe activarse al cargar la página. Tanto Firefox como Chrome ahora hacen lo correcto a partir de Firefox 4 y Chrome 34 .