Почему event.state на window.onpopstate пуст при нажатии с таким же адресом.href (или пустой)

При нажатии на историю и настройке данных без изменения URL-адреса:

window.history.pushState({
    stateName: "myStateName", 
    randomData: window.Math.random()
}, "myStateName", location.href);

.... а затем прослушать поп-событие и вызвать его, нажав кнопку "Назад" в браузере:

window.onpopstate = function(event) {
  console.log(event.state); //logs null
}

В большинстве случаев вы получите значение null вместо значения состояния, а не:

{
    stateName: "myStateName", 
    randomData: 0.34234234234
}

Как я могу это решить и почему это происходит?

Ответы

Ответ 1

Это странная проблема, и, по моему мнению, она недостаточно документирована. У меня возникли проблемы с поиском решения этой проблемы. После часа расстроенного поиска в Google и попытки/решения различных решений я заметил, что он начал работать, когда я дважды нажал на состояние (или больше). Стало ясно, что event.state ссылается на второе последнее состояние, которое было нажато.

Таким образом, ответ на эту работу - дважды нажать, послушать.

window.history.push(..);
window.history.push(..);

Я надеюсь, что это помогает кому-то!