【发布时间】:2019-09-26 18:15:23
【问题描述】:
在移动 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 设备上有硬件后退按钮(三星 S5、BlackBerry Key 2 是我正在测试的两个设备)。按下硬件后退按钮时永远不会调用 popstate 事件,因此用户会被转出应用程序而不是返回页面。是否有任何已知的方法可以通过 Javascript 拦截此硬件后退按钮?
需要明确的是,除了那些似乎不会触发历史 popstate 事件的硬件后退按钮(不是软按钮或像 Android 10 中那样向后滑动)的设备之外,几乎所有设备都可以完美运行后退。
【问题讨论】:
标签: javascript android google-chrome mobile