Обработчик события popstate, похоже, не работает
У меня проблема с обработчиком события popstate, это мой код:
window.addEventListener("popstate", function (event){
if (event.state) {
alert('abc')
}
});
// The data object is arbitrary and is passed with the popstate event.
var dataObject = {
createdAt: '2011-10-10',
author: 'donnamoss'
};
var url = '/posts/new-url';
history.pushState(dataObject, document.title, url);
Я ожидал, что этот код выведет окно предупреждения при его выполнении, но ничего не произойдет.
Здесь что-то не так?
Спасибо.
Ответы
Ответ 1
pushState
не запускать событие popstate
, только нажатие кнопки "назад/вперед" (или использование обратного пространства) или вызов history.back()
/history.go(n)
вызовет это событие.
Кроме того, в браузерах webkit событие popstate
запускается после события onload
, но Firefox и IE не имеют такого поведения.
Ответ 2
Нет, не будет,
По Документация MDN
Обратите внимание, что просто вызов history.pushState() или history.replaceState() не вызывает событие popstate. Событие popstate запускается только с помощью действия браузера, такого как щелчок по кнопке "Назад" (или вызов history.back() в JavaScript).
Снова в соответствии с этот вопрос событие popstate
не запускается в Chrome
при вызове pushState()
.
Ответ 3
history.pushState()
не будет запускать popstate
по определению.
Событие popstate запускается в некоторых случаях при навигации к записи истории сеанса.
Это событие предназначено для запуска только при навигации по записи истории, либо нажатием кнопки "Назад/вперед", либо history.go/back
.
Ответ 4
Вы также подключите обработчик обратного вызова popstate
следующим образом:
window.onpopstate = someCallback;
Подробнее узнать об этом onpopstate
WindowEventHandler здесь.