H5 页面在安卓 App 的 WebView 里打开,按一次物理返回键直接关掉页面回到桌面,站内还有三层没退,产品要求逐层返回。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
history.pushState({ guard: true }, '', location.href);
window.addEventListener('popstate', () => {
if (closeTopLayer()) history.pushState({ guard: true }, '', location.href);
});
页面只用前端路由切换视图,没有往 history 里压记录,WebView 认为没有可回退的条目。默认行为就是 finish 当前 Activity。这一点先确认清楚,后面就不用反复试。
「安卓返回键」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。
改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。
具体做法是,首次进入时 pushState 垫一条空记录;监听 popstate 逐层关闭弹窗和子页;确认没有可退层级后再让 WebView 执行返回;真机上从首页连按三次返回验证顺序。
改完照着核一遍,连按三次返回依次关闭弹窗、回到列表、回到首页,第四次才退出。
