微信中苹果h5页面用window.history.go(-1)返回上一页页面不会重新加载/刷新


1、问题:在实际开发中遇到这样一个问题,业务需求涉及到返回上一页问题,第一时间想到了window.history.go(-1)或者history.back(-1)方法,这样做本身没有任何问题,但是在微信中,安卓手机还好返回上一页页面会重新加载,而ios却不会重新加载页面,这就很难受了。

2、原因:页面是从缓存中读取

3、解决方案:用onpageshow事件监听页面是直接从服务器上载入还是从缓存中读取。

function pageShow(){
  // 通过persisted属性判断是否存在 BF Cache
  if (e.persisted && window.location.href.indexOf('/usercenter#/order-list') > -1) {
    window.location.reload();
  }
}
window.onpageshow = pageShow;
 
4、原理剖析

onpageshow 事件在用户浏览网页时触发。

onpageshow 事件类似于 onload 事件,onload 事件在页面第一次加载时触发, onpageshow 事件在每次加载页面时触发,即 onload 事件在页面从浏览器缓存中读取时不触发。

为了查看页面是直接从服务器上载入还是从缓存中读取,你可以使用 PageTransitionEvent 对象的 persisted 属性来判断。 如果页面从浏览器的缓存中读取该属性返回 ture,否则返回 false

 

是否支持冒泡: No
是否可以取消: No
事件类型: PageTransitionEvent
支持的 HTML 标签: <body>

以下是几种使用方式:

1。直接在HTMl中使用,注意只能在body上进行事件注册

<body onpageshow="pageShow(event)">

2.JS中通过元素获取绑定在body上

document.getElementsByTagName("BODY")[0].onpageshow = pageShow;

3.在window上注册这个方法

window.addEventListener("pageshow", pageShow);

 

通过以上方法,可以满足需求,也能判断当前页面是否是缓存页面。。。event的很多属性都有点意思。。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM