微信中蘋果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