场景:在微信中使用授权登录后 物理返回 页面未更新
解决方法: 调用以下方法
// vue项目
mounted() {
window.onpageshow = (event) => {
if (event.persisted) window.location.reload();
};
}
原理:pageShow事件在页面显示即会触发,无论页面是否来自BF Cache。通过检测persisted属性即可判断是否存在 BF Cache 行为。
优点:大部分浏览器都支持pageShow方法与persisted属性,并且需要的代码量只需要短短4行即可。
缺点:每种浏览器中BF Cache的机制是不同的,部分浏览器中的Bf Cache还是会重新执行js代码,会造成重复渲染效果。当然现在我们只考虑Ios中的微信页面, 所以是不存在问题。