Pregunta

Tengo un Ajax aplicación pesada que puede tener una URL como

http://example.com/myApp/#page=1

Cuando un usuario manipula el sitio, la barra de direcciones puede cambiar a algo como

http://example.com/myApp/#page=5

sin necesidad de recargar la página.

Mi problema es el siguiente secuencia:

  1. Un usuario de marcadores de la primera URL.
  2. El usuario manipula la aplicación que la segunda URL es el estado actual.
  3. El usuario hace clic en el marcador creado en el paso 1.
  4. La dirección URL en la barra de direcciones cambia de http://example.com/myApp/#page=5 a http://example.com/myApp/#page=1, pero yo no conozco una manera de detectar el cambio ocurrió.

Si puedo detectar un cambio algunos JavaScript sería actuar sobre ella.

¿Fue útil?

Solución

HTML5 introduce un hashchange evento que permite registrarse para recibir notificaciones de url hash cambios sin sondeo para ellos con un temporizador.

Esto es apoyado por todos los principales navegadores (Firefox 3.6, IE8, Chrome, otros basado en Webkit de los navegadores), pero me gustaría aún muy sugieren el uso de una biblioteca que gestiona el evento para usted - es decir,mediante el uso de un temporizador en los navegadores que no lo soporte HTML5 evento y usando el evento de otra manera.

Para más información sobre el evento, ver https://developer.mozilla.org/en/dom/window.onhashchange y http://msdn.microsoft.com/en-us/library/cc288209%28VS.85%29.aspx.

Otros consejos

comprobar la dirección actual periódicamente usando setTimeout / intervalo:

 var oldLocation = location.href;
 setInterval(function() {
      if(location.href != oldLocation) {
           // do your action
           oldLocation = location.href
      }
  }, 1000); // check every second

Se debe extender el objeto ubicación para exponer un evento que se puede enlazar a.

es decir:

window.location.prototype.changed = function(e){};

(function() //create a scope so 'location' is not global
{
    var location = window.location.href;
    setInterval(function()
    {
        if(location != window.location.href)
        {
            location = window.location.href;
            window.location.changed(location);
        }
    }, 1000);
})();

window.location.changed = function(e)
{
    console.log(e);//outputs http://newhref.com
    //this is fired when the window changes location
}

SWFAddress es una excelente biblioteca para este tipo de cosas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top