window.onpopstate влияет только на диапазон страниц из одного

У меня есть функция, которая загружает динамический контент из базы данных, она вызывается при нажатии на определенные ссылки:

JQuery

<script>
function loadContent(href){
$.getJSON("/route", {cid: href, format: 'json'}, function(results){  
$("#content_area").html("");
$("#content_area").append(results.content);
reinitFunc1();
reinitFunc2();
reinitFunc3();
// history.pushState('', 'New URL: '+href, href);
});
};
</script>

Я хочу включить pushState и onpopstate.

Я могу включить изменение URL-адреса и истории браузера, раскомментировав приведенную выше строку history.pushState — навигация вперед и назад по нескольким страницам работает правильно.

Но это не загружает содержимое.

Некоторое время назад я думал, что у меня была полная функциональность (т.е. навигация и загрузка контента) с добавлением следующих элементов:

window.onpopstate = function(event) {
console.log("pathname: "+location.pathname);
loadContent(location.pathname);
};

Поэтому я попытался добавить их в отдельный блок:

<script>
$(document).ready(function() {
window.onpopstate = function(event) {
console.log("pathname: "+location.pathname);
loadContent(location.pathname);
};
});
</script>

Но это приводит к тому, что диапазон страниц при навигации ограничивается одной, и я не могу перемещаться вперед.

Как я могу добиться как навигации, так и загрузки контента, используя приведенный выше код в качестве основы?

Изменить

И для справки, правильные пути есть в истории браузера, просто по ним не пройти (ФФ и Хром) и соответствующий контент не загружается. Ошибок в Firebug нет.


person user1063287    schedule 22.11.2013    source источник


Ответы (1)


Я думаю, что это ответ, я наткнулся на это:

https://stackoverflow.com/a/10176315/1063287

«Также убедитесь, что страницы, загруженные в onpopstate(), не пытаются использовать pushState() сами».

Итак, я сохранил это:

<script>
$(document).ready(function() {
window.onpopstate = function(event) {
console.log("pathname: "+location.pathname);
loadContent(location.pathname);
};
});
</script>

Но удалил это из функции:

history.pushState('', 'New URL: '+href, href);

И вместо этого добавил его к jQuery, запускаемому при нажатии, например:

$(document).on("click","#main_menu a", function (e) {
href = $(this).attr("href");
loadContent(href);
history.pushState('', 'New URL: '+href, href);
e.preventDefault();
});
person user1063287    schedule 22.11.2013