Detectar eventos AngularJS onHashChange externamente

Estoy tratando de escuchar eventos de modificación de URL fuera de una aplicación AngularJS que usa el estándar ui-router. Dado que Angular actualiza la ubicación hachís, supongo que dispararía onhashchange eventos. Sin embargo, en los últimos Chrome/Firefox en Mac, nunca lo hace.

Todo lo que veo (en Chrome) es el evento popstate activado una vez para la carga inicial:

$(window).on('hashchange', function(){
  console.log('hashchange'); // Never fired
});
$(window).on('popstate', function(){
  console.log('popstate'); // Only fires on initial app load
});

¿Hay algún evento diferente que pueda escuchar fuera del código Angular en sí?

preguntado el 14 de febrero de 14 a las 01:02

Si no ve la hashchange evento, me pregunto si están usando history.pushState - desarrollador.mozilla.org/en-US/docs/Web/Guide/API/DOM/… -

Estoy bastante seguro de que .pushState debería estar desencadenando el popstate evento -

De los documentos de MDN sobre el evento popstate: Note that just calling history.pushState() or history.replaceState() won't trigger a popstate event. The popstate event is only triggered by doing a browser action such as a clicking on the back button (or calling history.back() in JavaScript). And the event is only triggered when the user navigates between two history entries for the same document. -

1 Respuestas

Según la evidencia, parece estar usando pushState y no hay eventos activados para ese método, por lo que la única solución que encontré es anular el método pushState y activar un evento personalizado:

// Custom pushState event
(function(history){
    var pushState = history.pushState;
    history.pushState = function(state){
      $(window).trigger('pushState');
      return pushState.apply(history, arguments);
    };
})(window.history);

$(window).on('pushState', function(event){
  console.log('hashchange');
});

Respondido 14 Feb 14, 01:02

Tenga en cuenta que en navegadores más antiguos (antiguo IE), no pueden usar pushState, por lo que cambian el hash y trabajan con el hashchange evento - Ian

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.