安卓下微信点击返回键popstate事件不能触发监听

在做一个项目回退的功能的时候,用pushState添加一条历史记录,然后监听popState的回退功能,发现在安卓手机中增加了记录console.log(“当前浏览器记录”,window.history),当前的history.length长度是2,但是回退的话安卓手机直接退出微信的webview,然后测试滚动页面之后在回退依旧直接退出微信的webview,当点击一下页面空白位置或者交互一下发现,回退才触发popstate,
在安卓机中触发popstate监听有个条件就是必须和页面产生交互后才能触发。那我就通过js自动播放音频文件的方式让页面产生模拟交互。当然这个音频文件可以不用存在。

加入如下代码可以解决安卓部分机型(都说安卓的7.0.16未生效,但是我测试的生效了,所见的机型都可以应用)

1
2
3
4
5
6
7
if (UserAgent.env.android) {
try {
window.tbs_bridge.nativeExec('network', 'type', 0, null);
} catch (e) {
console.error(e);
}
}

HTML5 新API

history.pushState(state, title, url); 添加一条历史记录,不刷新页面
history.replaceState(state, title, url); 替换一条历史记录,不刷新页面

事件
popState事件:历史记录发生变化时触发,调用history.pushState()或history.replaceState()不会触发此事件

1
window.addEventListener('popstate', handlePopstate);

hashchange事件:页面hash值发生改变时触发

1
window.addEventListener('hashchange', handleHashChange);

关于部分安卓机使用手势返回/物理返回键监听不了的问题

上面的代码在IOS中是没有问题的,但是在调试的时候发现部分安卓尽然监听不了popstate;

关于此问题,微信社区也看到了,但是工作人员都没有给出一个满意的解决方案(直接搜一下popstate,会出现关于这个问题的讨论):


然后也在网上搜一下这个问题(相关文章):