Очистить историю html, созданную pushState при обновлении

У меня есть массив состояний и индекс массива в history.state, а в popstate я читаю содержимое массива, он работает нормально, но когда я возвращаюсь на первую страницу и обновляю массив, он исчезает (что нормально), но вперед история состояние остается.

Можно ли удалить поддельную историю, созданную с помощью pushState?

Я не могу сохранить свое состояние в localStorage, потому что у меня есть функции в моем массиве состояний.


person jcubic    schedule 09.04.2014    source источник
comment
Вы можете установить новое состояние, используя pushState или replaceState при загрузке страницы, это удалит историю пересылки.   -  person sergiogarciadev    schedule 21.05.2014


Ответы (4)


Если вы прочитали спецификацию History API для pushState, на шаге 4 указано

  1. Если вызванный метод был методом pushState():
    Удалите все записи в истории сеансов контекста просмотра после текущей записи. Если текущая запись является последней записью в истории сеанса, то никакие записи не удаляются.

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

person Gabriele Petrioli    schedule 21.05.2014
comment
Почти работает, но когда я создаю pushState onInit (обновление), у меня есть две страницы в истории, оригинальная реальная страница и поддельная из pushState. replaceState также не работает, потому что он не очищает историю, а только меняет текущую. Это не идеально, но, вероятно, вы не можете сделать лучше. - person jcubic; 24.05.2014

Моя идея - переопределить всю историю:

for (i = 0; i < 50; i++) {
  history.pushState({}, '');
}

person Luke Duda    schedule 05.08.2016
comment
Что бы это ни стоило, моя проверка на вирусы предотвратила это из-за внедрения истории, поэтому она может работать не на всех клиентах. - person JustinKSU; 07.12.2018


window.history.replaceState('page', '');

этот код при загрузке страницы предотвратит двойную кнопку возврата

person user1885464    schedule 16.01.2020
comment
Это не отвечает на вопрос, это просто замена последнего URL. не понятная история. Читать первый и единственный комментарий. - person jcubic; 18.01.2020