Я сделал забавный хак, чтобы решить эту проблему, к моему удовлетворению. У меня есть AJAX-сайт, который загружает содержимое динамически, затем изменяет window.location.hash, и у меня был код для запуска на $ (document) .ready (), чтобы проанализировать хэш и загрузить соответствующий раздел. Дело в том, что я был совершенно доволен кодом загрузки моего раздела для навигации, но хотел добавить способ перехвата кнопок браузера назад и вперед, которые изменяют расположение окна, но не мешают моим текущим процедурам загрузки страниц, где я манипулирую window.location и опроса window.location с постоянными интервалами не могло быть и речи.
В итоге я создал объект как таковой:
var pageload = {
ignorehashchange: false,
loadUrl: function(){
if (pageload.ignorehashchange == false){
//code to parse window.location.hash and load content
};
}
};
Затем я добавил строку в сценарий своего сайта, чтобы запустить функцию pageload.loadUrl
для события hashchange , например:
window.addEventListener("hashchange", pageload.loadUrl, false);
Затем, в любое время, когда я хочу изменить window.location.hash
без запуска этой процедуры загрузки страницы, я просто добавляю следующую строку перед каждой строкой window.location.hash =
:
pageload.ignorehashchange = true;
и затем следующая строка после каждой строки модификации хеша:
setTimeout(function(){pageload.ignorehashchange = false;}, 100);
Так что теперь мои процедуры загрузки разделов обычно выполняются, но если пользователь нажимает кнопки «назад» или «вперед», новое местоположение анализируется и загружается соответствующий раздел.