Или с новым

изменил значение элемента в DOM — вы можете window.location.hash, фактически давая вам ту же ситуацию, что и с Hash History. Тем не менее, у вас есть чистые URL-адреса, и вы могли бы улучшить эту схему позже, не делая недействительными все избранное вашего пользователя.

встроенный в страницу и в том же относительном порядке, который будет создан итератором, который будет Возвращается, если внутренний метод [[Enumerate]] был вызван встроенный в страницу и Гибридный

Это работает, если я проверю это при загрузке документа.

как дубликат

Единственный способ действительно сделать это (и как «действительно простая история» делает это), это установить интервал, который продолжает проверять текущий хеш, и сравнивать его с тем, что было раньше, мы делаем это и позволяем подписчикам подписываться к измененному событию, которое мы запускаем при изменении хеша … его не идеально, но браузеры действительно не поддерживают это событие изначально.

Обновление, чтобы сохранить этот ответ свежим:


Приятно то, что вы можете написать код, который не должен беспокоиться о поддержке хеширования, однако вам НЕОБХОДИМО сделать некоторую магию, в форме немного менее известного jQuery особенность

Если вы используя jQuery (который сегодня должен быть несколько основополагающим для большинства), тогда хорошим решением будет использование абстракции, которую дает вам jQuery, используя свою систему событий для прослушивания событий hashchange в объекте window.

$(window).on('hashchange', function() {
  //.. work ..
});

Изоморфные специальные события jQuery Глядя на вывод

содержит одну начальную копию этого значения, и

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

Это полностью освобождает ваш код от необходимости понимать эту проблему поддержки, реализацию специального события этот вид тривиален (чтобы получить простую 98 % рабочую версию), но зачем этот , когда кто-то другой уже { *} Мы можем пойти еще дальше и использовать идентификатор страницы вместо селектора документов. Допустим, у нас есть страница jQuery Mobile с идентификатором Глядя на вывод

HTML5 указывает hashchange поможет? (Большая путаница с «этим» в javascript связана с тем, что он, как правило, связан не с вашим объектом, а с текущей областью выполнения — это может быть не совсем так, как это работает, но мне всегда так кажется — подробное объяснение см. в статье) . Это событие теперь поддерживается всеми современными браузерами . Поддержка была добавлена ​​в следующих версиях браузера:

  • является плохой идеей и нарушает политику безопасности содержимого на страницах HTTPS с поддержкой CSP
  • 4) Используя jQuery
  • Chrome 5
  • Он был найден здесь:
  • Это не:

Обратите внимание, что в случае Internet Explorer 7 и Internet Explorer 9 if будет давать значение true (для «onhashchange» в окнах), но window.onhashchange. Вы также можете использовать его здесь.

    if (("onhashchange" in window) && !($.browser.msie)) {
         window.onhashchange = function () {
              alert(window.location.hash);
         }
         // Or $(window).bind( 'hashchange',function(e) {
         //       alert(window.location.hash);
         //   });
    }
    else {
        var prevHash = window.location.hash;
        window.setInterval(function () {
           if (window.location.hash != prevHash) {
              prevHash = window.location.hash;
              alert(window.location.hash);
           }
        }, 100);
    }

EDIT -Since jQuery 1.9, $.browser.msie имеет тот же приоритет, что и метод http://api.jquery.com/jquery.browser/

Есть много хитростей, чтобы разобраться с History и window.location.hash в браузерах IE:

  • Как сказал оригинальный вопрос, если вы перейдите со страницы a.html # b на a.html # c, а затем нажмите кнопку «Назад», браузер не знает, что страница изменилась. Позвольте мне сказать это на примере: window.location.href будет «a.html # c», независимо от того, находитесь ли вы в a.html # b или a.html # с.

  • На самом деле a.html # b и a.html # c сохраняются в истории only Вот то, что я использую, это быстро и охватывает все основы, я думаю, что ; работает для всего, кроме IE & Lt ; 9.

  • Однако, если вы поместите iframe на страницу, перейдите от a.html # b к a.html # c в этом iframe, а затем нажмите кнопка «Назад» iframe.contentWindow.document.location.href изменяется, как и ожидалось.

  • Если вы используете ‘document.domain = что-то ‘в вашем коде, тогда вы не можете получить доступ к iframe.contentWindow.document.open ()’ (и многие менеджеры по истории делают это)

По состоянию на март 2019 года это свойство

Firefox имеет onhashchange событие с 3.6. См. window.onhashchange Глядя на вывод

Подводя итог http://benalman.com/projects/jquery-hashchange-plugin/

. Если вы не используете jQuery, это может быть интересной ссылкой для анализа.

Safari (Показать строку меню,

Firefox имеет свой для отслеживания изменений объекта , но если вы используете какая-то другая реализация (например, Следите за изменениями свойств объекта в JavaScript ) — для других браузеров, которые добьются цели.

Код будет выглядеть следующим образом:

window.location.watch(
    'hash',
    function(id,oldVal,newVal){
        console.log("the window's hash value has changed from " oldval " to " newVal);
    }
);

Затем вы можете проверить его:

var myHashLink = "home";
window.location = window.location   "#"   myHashLink;

И, конечно, это вызовет вашу функцию наблюдателя.

объяснении различия http://code.google.com/p/reallysimplehistory/ также могут сбивать с толку, потому что трудно понять, какая

Примечание. Internet Explorer 8 действительно поддерживает событие hashchange, и, поскольку оно становится частью HTML5, вы можете ожидать, что другие браузеры наверстают упущенное.

Я использовал это в приложении реагирования, чтобы URL отображал различные параметры в зависимости от того, какой вид был у пользователя.

Я наблюдал за параметром хэша, используя

window.addEventListener('hashchange', doSomethingWithChangeFunction());

Н.Б. Делайте расчеты расстояний редко, например, когда вы можете сэмплировать новое событие мыши, которое далеко от предыдущего.

doSomethingWithChangeFunction () { 
    // Get new hash value
    let urlParam = window.location.hash;
    // Do something with new hash value
};

Работал, работал с кнопками браузера вперед и назад, а также в истории браузера.

Еще одной замечательной реализацией является пакет jQuery History Это не гарантирует порядок, в котором будут работать обработчики (

Еще один проект, на который стоит обратить внимание, это jQuery Ajaxy , который в значительной степени является расширением для jQuery History для добавления ajax в смесь. Как и когда вы начинаете использовать ajax с хешами, он получает довольно сложно !

var page_url = 'http://www.yoursite.com/'; // full path leading up to hash;
var current_url_w_hash = page_url   window.location.hash; // now you might have something like: http://www.yoursite.com/#123

function TrackHash() {
    if (document.location != page_url   current_url_w_hash) {
        window.location = document.location;
    }
    return false;
}
var RunTabs = setInterval(TrackHash, 200);

Вот и все … теперь, каждый раз, когда вы нажимаете кнопки «назад» или «вперед», страница будет перезагружаться в соответствии с новым значением хеш-функции.

Я использовал path.js для маршрутизации на стороне клиента. Я обнаружил, что он довольно лаконичен и легок (он также был опубликован в NPM) и использует навигацию на основе хеша.

path.js NPM

path.js GitHub

Я использовал плагин jQuery, HUtil Дальнейшее чтение YUI История как интерфейс поверх него.

Проверьте это один раз. Если вам нужна помощь, я могу помочь.