Обновить страницу один раз при запуске popstate?

У меня есть длинная страница, которая перемещается через scrollTop().

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

Проблема в том, что мой код приводит к бесконечному обновлению.

    $(window).bind('popstate', function(event) {
        //var path = window.location.pathname;
        //var filename = path.match(/.*\/([^/]+)\.([^?]+)/i)[1];
        //var pos = "#" + filename;
        //$(document).scrollTop(pos);
        location.reload();
    });

Как я могу исправить это, чтобы обновить только один раз? Я пробовал one(), но это то же самое.


person user1721135    schedule 12.05.2013    source источник


Ответы (1)


Существует множество плагинов jQuery и простых JS для истории браузера, которые сделают то, что вы хотите.
Я не думаю, что обновление страницы активирует историю браузера для вас.

JQuery BBQ:
http://benalman.com/projects/jquery-bbq-plugin/
демо:
http://benalman.com/code/projects/jquery-bbq/examples/fragment-basic/#Chicken.html

История JS
https://github.com/browserstate/history.js/

person Sergej Popov    schedule 12.05.2013
comment
Я использую API истории, проблема в прокрутке, а не в общей реализации истории. Браузеры берут на себя управление положением прокрутки при переходе назад/вперед. Материал ajax, который у меня тоже есть, отлично работает. - person user1721135; 12.05.2013
comment
Это сработало бы, если бы я мог заставить браузер обновляться только один раз в popstate. Все плагины для этого не работают, из-за прокрутки, если бы был просто ajax, то да, работали бы. - person user1721135; 12.05.2013