Задать вопрос

Почему браузер не перезагаружает страницы при движении по истории назад?

Обновляю страницу по ajax добавляя в историю новое состояние так:
history.pushState('', title, url);
Но если нажимаю кнопку Назад браузера, то браузер просто меняет URL на старый, но не обновляет страницу на него (не перезагружает её).
Типа он запоминает что страница не обновлялась. Как сделать, чтобы обновление страницы всё же происходило?
Я имею ввиду не написать js как, который так же по ajax обновит страницу (как это сделать я знаю), а как заставить браузер делать рефреш при движении назад по истории.
  • Вопрос задан
  • 785 просмотров
Подписаться 4 Средний 1 комментарий
Пригласить эксперта
Ответы на вопрос 3
delphinpro
@delphinpro Куратор тега JavaScript
frontend developer
https://developer.mozilla.org/ru/docs/Web/API/Wind...
Ловите событие и обновляйте страницу аяксом.
Ответ написан
@rPman
Возможно браузер ведет себя в соответствии с заголовками кеширования данных, прописанных на странице
Под вопросом внутренний контент (например подключаемые картинки).

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

p.s. я очень любил старый opera с движком presto за подобное поведение, при нажатии назад браузер игнорирует любые настройки кеша и гарантированно не лезет на сервер, показывая содержимое максимально быстро
Ответ написан
@Sembit
Столкнулся с такой же проблемой, что при переходе назад браузер перестал запрашивать страницу у сервера, несмотря на то, что сервер постоянно возвращает браузеру заголовок Cache-Control: no-store, no-cache, must-revalidate. Точнее не запрашивает в следующем случае. Если я перехожу по обычной ссылке <a href="...">, а затем возвращаюсь по кнопке "Назад" или вызвав window.history.back(). Но если я обрабатываю переход на страницу, вешая onclick на a или на другой какой-то элемент и в обработчике у меня что-то вроде:
SendRequest('POST', '?action, '', (Request) => {
location.href = какая-то ссылка;
});

И после перехода на эту страницу нажму кнопку "Назад" или вызову window.history.back(), то браузер запросит предыдущую страницу у сервера, а не полезет в кэш. Для элементов A, чтобы обновлялась предыдущая страница, я назначил свой обработчик onclick, отправляю фиктивный POST-запрос (который все-таки должен быть правильно обработан сервером), сервер возвращает любое значение, не важно какое, после получения ответа осуществляется переход по href элемента:
function editClick() {
	let el = event.currentTarget;
	event.preventDefault();
	SendRequest('POST', '?formedit', '', (Request) => {
		location.href = el.href;
	});
}

И это работает. По крайней мере в Яндексе, Edge. По крайне мере сегодня - только начал разбираться с этой проблемой.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы