В мобильном приложении SPA я переопределил стандартное поведение возврата для переключения между страницами.
// create history states
history.pushState(-1, null); // back state
history.pushState(0, null); // main state
history.pushState(1, null); // forward state
history.go(-1); // start in main state
window.addEventListener('popstate', function (event) {
var state = event.state;
if (state === -1) {
if (!this.goBack()) {
return false;
}
// reset state to what it should be
history.go(-state);
}
}, false);
, которое прекрасно работает для всех мобильных устройств, кроме случаев, когда на некоторых устройствах Android есть кнопка возврата оборудования.(Samsung S5, BlackBerry Key 2 - это два, которые я тестирую).Событие popstate никогда не вызывается, когда нажимается аппаратная кнопка «назад», поэтому пользователь выгружается из приложения, а не возвращается на страницу.Есть ли какой-нибудь известный способ перехвата этой аппаратной кнопки возврата через Javascript?
Чтобы быть понятным, back прекрасно работает для всех устройств, кроме тех, которые имеют аппаратную кнопку возврата (не программную кнопку или пролистывание назад, как вAndroid 10), который, кажется, не вызывает событие всплывающего окна истории.