我们项目一直做的是小程序内嵌H5聊天室的项目
最近遇到了个奇怪的bug,当在聊天页面聊天的时候,点击了H5项目的链接,跳转出去了,回来之后,别人发的消息H5页面就看不到了。
按照在浏览器开发的逻辑,点击外部链接,再回来,其实相当于刷新页面。然而在刷新页面的时候,前端会去走接口请求全部的聊天记录,这样你在走期间的所有消息也会被展示。
想是这么想的,浏览器上运行也没有问题,但是真机测试的时候发现了问题。
在ios机型上,跳转外部链接,再回来不会重新请求历史记录接口,但是之前渲染的聊天气泡都在,这就导致,在离开的这个期间,对方发的所有消息,H5页面都是不会再继续展示的,展示的还是之前的消息。这是因为ios与安卓的浏览器缓存机制的问题导致的。
解决这个问题的关键是,有些接口当页面重新回来的时候要重新加载一遍,我们可以把这一部分接口放进window的onpageshow事件里面去。当页面重新展示的时候,我去加载一遍我的接口。
可以进行机型检测,当只有苹果机型,并且能确定页面是从缓存读取出来的时候,我再去重新刷新页面。
window.onpageshow = function(event) {
// persisted判断页面是不是从缓存里面读取出来的
if (event.persisted) {
if (isweixin()) {
// 判断是不是微信ios环境
if (window.__wxjs_is_wkwebview) {
// 刷新页面
window.location.reload()
}
}
}
}