it-swarm.com.ru

JavaScript позволяет изменить адресную строку с помощью JavaScript?

У меня есть тяжелое приложение Ajax, которое может иметь URL-адрес, такой как

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

Когда пользователь манипулирует сайтом, адресная строка может измениться на что-то вроде

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

без перезагрузки страницы.

Моя проблема заключается в следующей последовательности:

  1. Пользователь закладывает первый URL.
  2. Пользователь манипулирует приложением так, что второй URL является текущим состоянием.
  3. Пользователь нажимает на закладку, созданную на шаге 1.
  4. URL в адресной строке меняется с http://example.com/myApp/#page=5 на http://example.com/myApp/#page=1 , но я не Не знаю, как обнаружить произошедшее изменение.

Если я обнаружу изменение, JavaScript будет действовать на него.

27
JoshNaro

HTML5 вводит событие hashchange, которое позволяет вам регистрироваться для уведомлений об изменениях хеша URL, не опрашивая их по таймеру.

Он поддерживается всеми основными браузерами (Firefox 3.6, IE8, Chrome, другие браузеры на основе Webkit), но я все же настоятельно рекомендую использовать библиотеку, которая обрабатывает событие для вас - то есть, используя таймер в браузерах, не поддерживающих HTML5 событие и использование события в противном случае.

Для получения дополнительной информации о мероприятии см. https://developer.mozilla.org/en/dom/window.onhashchange и http://msdn.Microsoft.com/en-us/library/cc288209% 28VS.85% 29.aspx .

35
ThiefMaster

периодически проверяйте текущий адрес, используя setTimeout/interval:

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

Вы должны расширить объект местоположения, чтобы выставить событие, к которому вы можете привязать.

то есть:

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
}
5
Skawful

SWFaddress это отличная библиотека для таких вещей.

0
moritzstefaner