history.go(-1)不刷新的其他處理


場景描述:

a頁打開b頁,b頁執行history.go(-1)意圖關閉當前頁的同時刷新a頁。但在微信客戶端或者部分android手機無效果。

 

供參考的處理方式:

1、在js中寫上location.href = document.referrer;就可以實現跳轉到上一個頁面了,讓用戶覺得體驗很好

 但是在IE中referrer就沒那么盡人意了啊,IE會清空referrer

 眾所周知,我們web開發人員痛恨IE瀏覽器,因為IE不支持標准,標准外的默認行為又和其他瀏覽器經常不一致:

在IE中用javascript做跳轉,比如用window.location.href = “http://www.google.com”; google無法取到瀏覽器請求的HTTP referrer,因為IE清空了document.referrer

而其他主流瀏覽器Firefox和Chrome都會保留referrer,這意味着IE又要享受“部長級”特殊待遇了:

if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)){ 
   var referLink = document.createElement('a');
   referLink.href = url; 
   document.body.appendChild(referLink);
   referLink.click();
}else {
   location.href = url; 
}

這樣的原理就是給IE瀏覽器的頁面偷偷加了個鏈接,然后自動點這個鏈接,於是referrer就能保留了。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

2、window.onpageshow事件

 

window.onpageshow = function(event){
  if (event.persisted) {
    //todo something or like window.location.reload();
  }
};

 

 

前述:

Firefox和Opera有一個新特性,名叫“往返緩存”(back-forward cache,或bfcache),可以在用戶使用瀏覽器的“后退”和“前進”按鈕時加快頁面的轉換速度。

這個緩存中不僅保存着頁面數據,還保存了DOM和JavaScript的狀態;實際上是將整個頁面都保存在了內存里。
如果頁面位於bfcache中,那么再次打開該頁面就不會觸發load事件。
盡管由於內存中保存了整個頁面的狀態,不觸發load事件也不應該會導致什么問題,但為了更形象地說明bfcache的行為,Firefox還是提供了一些新事件。

 

第一個事件就是pageshow,這個事件在頁面顯示時觸發,無論頁面是否來自bfcache。在重新加載頁面中,pageshow會在load事件觸發后觸發;
而對於bfcache中的頁面,pageshow會在頁面狀態完全恢復的那一刻觸發。另外要注意的是,雖然這個事件的目標是document,但必須將其事件處理程序添加到window。

 

有時可能需要在pagehide事件觸發時根據persisted的值采取不同的操作。
對於pageshow事件,如果頁面是從bfcache中加載的,那么persisted的值就是true;
對於pagehide事件,如果頁面在加載之后會保存在bfcache中,那么persisted的值也會被設置為ture。

因此,當第一次觸發pageshow時,persisted的值一定是false,而在第一次觸發pagehide時,persisted就會變成true(除非頁面不會保存在bfcache中)。
指定了onunload事件處理程序的頁面會被自動排除在bfcache之外,即使事件處理程序是空的。

具體原因:
onunload最常用於撤銷在onload中所執行的操作,而跳過onload后再次顯示頁面很可能會導致頁面不正常。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM