History.pushState: возврат в историю после загрузки фактического URL-адреса отправленного состояния - PullRequest
0 голосов
/ 16 июня 2020

У меня есть сайт с оверлеем. Вот моя проблема:

  1. Я нахожусь на странице 1 и нажимаю текст, который открывает оверлей с использованием JS, а также использует history.pushState() для изменения URL-адреса соответственно:

history.pushState(null, "Page 2", "/page/2")

Затем я перезагружаю страницу с помощью кнопки перезагрузки браузера, что заставляет мое приложение использовать go на фактический URL-адрес (страница 2), который я ранее нажал, используя history.pushState()

Теперь, когда я нажимаю кнопку возврата в браузере, я ожидаю go возврата на страницу 1, но вместо этого ничего не происходит, кроме как браузер меняет URL-адрес и заголовок на страницы 1 - сам сайт не перезагружается.

Я не знаю, почему это происходит. У меня есть простой прием, который работает, но он кажется очень грязным:

window.addEventListener("popstate", function(e) {
            let title = document.title
            setTimeout(() => {
                if (document.title === title) {
                    location.reload()
                }
            }, 100)
        })

Этот прием работает, потому что хотя браузер меняет заголовок в браузере при возврате назад, заголовок документа остается прежним, потому что сайт не обновляет sh. Итак, я заставляю refre sh.

1 Ответ

0 голосов
/ 16 июня 2020

history.pushState изменяет URL-адрес, но не перезагружает страницу. Вы пробовали использовать location.href?

PD Я предполагаю, что вы не работаете с одностраничным приложением. Если да, не выполняйте location.href, иначе вы принудительно создадите ненужный refre sh.

...