Есть ли способ в History.js узнать, когда была нажата кнопка «Назад»? - PullRequest
5 голосов
/ 21 ноября 2011

Я начал тестировать History.js . После понимания того, как это работает и что нет popstate, вместо этого есть statechange. Я ищу способ отличаться при нажатии кнопки "Назад" в браузере.

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

Я надеюсь, что решение не в том, чтобы отслеживать последние URL, посещенные в глобальной переменной.

Спасибо

Ответы [ 5 ]

18 голосов
/ 10 мая 2013

Я обнаружил, что решения на github немного устарели для моих целей.Я создал bool, который всегда верен, за исключением случаев, когда я использовал History для изменения состояния.

var manualStateChange = true;

History.Adapter.bind(window,'statechange',function(){
    if(manualStateChange == true){
     // BACK BUTTON WAS PRESSED
    }
    manualStateChange = true;
});

Каждый раз, когда я изменяю состояние программно, устанавливаю bool на false:

manualStateChange = false;
History.pushState(null, null, currentPath);
4 голосов
/ 01 февраля 2013

Я знаю, что это довольно устаревший вопрос, но я пришел к решению проблем с кнопкой «назад / вперед» при переключении между стандартной страницей и страницей «Состояние-история».

Сценарий: использование HTML5History (или плагин history.js) на наборе страниц. Затем другие страницы нам нужны реальные загрузки, то есть стандартная страница (не спрашивайте, почему, но есть определенные варианты использования, которые могут понадобиться)

Когда вы переходите со страницы «Состояние истории» и выполняете реальную загрузку на стандартной странице.Вы не можете вернуться назад: он изменяет URL, но не загружает страницу - он только запускает смену состояния;который я предполагаю, является вопросом оригинального сообщения.Мое личное мнение таково, что это ошибка браузера (хотя проблема есть во всех браузерах), потому что браузер должен знать, что страница, на которой вы находитесь, была перезагружена за пределами страницы состояния истории.

Я исправил этос чем-то действительно простым: прослушивание события смены состояния и скажите браузеру, чтобы он обновлялся при его запуске.Таким образом, мне все равно, вернутся ли они назад или вперед с этой страницы.Если браузер считает, что состояние меняется (ссылки не запускают событие смены состояния), только событие «назад / вперед» на страницу «История» запускает это событие, поэтому оно решает проблему.

Код с использованием jQuery + HistoryПлагин .js:

$(window).on('statechange', function() {
    window.location.reload();
});

Если это не имеет смысла, вероятно, у вас нет этой проблемы.Тем не менее, я заметил это на многих сайтах, которые используют , использующих историю HTML 5 (эта проблема возникает даже на pinterest.com, если вы перезагрузитесь, когда находитесь на модальном изображении, а затем попытаетесь вернуться назад).1015 * Надеюсь, если у вас возникнет эта проблема, вы найдете этот ответ и с облегчением вздохнете:)

0 голосов
/ 16 августа 2016

Ответ тот же, что и у Джеймса Ваггонера. событие 'statechange' запускалось в обоих направлениях, поэтому вместо этого я проверяю только событие 'popstate', которое в моем случае вызывается только когда пользователь возвращается

window.addEventListener('popstate', function() {
  window.location.reload();
});
0 голосов
/ 27 января 2016

В официальной версии эта функция недоступна.Попробуйте использовать этот файл в основном, пока: https://github.com/danger89/history.js/blob/master/scripts/bundled/html5/jquery.history.js

Я не могу гарантировать, что его решение работает для каждого браузера.Но это хорошее решение.Если вы применили его изменения, вы можете использовать:

var State = History.getState();
if (State.navigation) {
    // Back / forward button is pressed.
}

Более подробную информацию можно найти по Выпуск Github 47 .

0 голосов
/ 01 декабря 2011

Я наконец-то справился со всеми ссылками, используя History.pushState, поэтому нет необходимости различать нажатие кнопки назад. Мы обрабатываем все изменения состояния одинаково.

Редактировать: Обнаружил эти две проблемы в Github History.js, может кому-то помочь. https://github.com/browserstate/history.js/issues/70 https://github.com/browserstate/history.js/issues/47

...