在做一个项目回退的功能的时候,用pushState添加一条历史记录,然后监听popState的回退功能,发现在安卓手机中增加了记录console.log(“当前浏览器记录”,window.history),当前的history.length长度是2,但是回退的话安卓手机直接退出微信的webview,然后测试滚动页面之后在回退依旧直接退出微信的webview,当点击一下页面空白位置或者交互一下发现,回退才触发popstate,
在安卓机中触发popstate监听有个条件就是必须和页面产生交互后才能触发。那我就通过js自动播放音频文件的方式让页面产生模拟交互。当然这个音频文件可以不用存在。
加入如下代码可以解决安卓部分机型(都说安卓的7.0.16未生效,但是我测试的生效了,所见的机型都可以应用)
1 | if (UserAgent.env.android) { |
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,会出现关于这个问题的讨论):
然后也在网上搜一下这个问题(相关文章):