Я пытаюсь использовать событие «pushState» и «popstate» для перехвата навигации по кнопке «Назад», однако, хотя событие popstate правильно запускается в Firefox, оно не запускается в Chrome (версия 76.0.3809.87 (официальная сборка) (64). -bit)) если нет взаимодействия с пользователем.
Судя по тестированию, событие popstate срабатывает только в том случае, если пользователь взаимодействует со страницей (т. е. щелкает где-нибудь в документе). Поэтому, если вы загрузите страницу, не взаимодействуя с ней, и нажмете «Назад», функция popstate не будет вызвана.
Я добавил Fiddle, чтобы продемонстрировать это: https://jsfiddle.net/0xwvLndu/
Чтобы протестировать Fiddle в Chrome, просто щелкните ссылку и нажмите кнопку «Назад». Вы не увидите оповещения. Затем снова щелкните ссылку, но на этот раз щелкните в любом месте документа Fiddle, а затем нажмите кнопку «Назад», после чего сработает предупреждение.
Я нашел обсуждение на форуме Chromium, которое может иметь отношение к этой причуде, и, возможно, это было реализовано для предотвращения злоупотребления записями истории - https://groups.google.com/a/chromium.org/forum./#!topic/blink-dev/OCS7g72HtyI и < a href="https://github.com/WICG/interventions/issues/21#issuecomment-425609246" rel="noreferrer">https://github.com/WICG/interventions/issues/21#issuecomment-425609246< /а>
Если это так, значит ли это, что на popstate больше нельзя полагаться для перехвата действий кнопки «Назад», и если да, то есть ли обходное решение?
Ниже приведен пример того, что я тестировал:
window.addEventListener('load', function() {
history.pushState(null, null, document.URL);
});
window.addEventListener('popstate', function(event) {
alert('test');
});
Я ожидал, что предупреждение будет вызываться кнопкой «Назад» независимо от взаимодействия с пользователем, но в Chrome этого не происходит.