移動端popstate的怪異行為


由於ios的性能在緩存頁面比較好,所以一般頁面的后退都會保存之前的歷史頁面,

不會觸發頁面上的js等,所以可以觸發到popstate事件,而webkit的某些版本對popstate

的理解與官方標准不一致,導致每次訪問頁面都會同步為訪問了這個頁面的歷史紀錄,

所以popstate就被觸發了,而在項目中需要IOS一個后退刷新頁面

代碼:

window.addEventListener('popstate', function() {
    window.location.reload();
});

  

但進入頁面后頁面不斷的觸發以上方法,刷新頁面,這個webkit的對popstate的詭異行為導致的。

對這個差異的認知就是webkit中詭異行為的原因。webkit並沒有把HTML5的History和傳統的區分開,而根據官方文檔對popstate的描述,只要訪問歷史記錄就會觸發popstate。而傳統的History中訪問頁面和生產歷史記錄是同時的。所以在webkit中,無論是刷新還是訪問一個新網頁都會觸發popstate。而其它瀏覽器中這個popstate僅作用於HTML5的History,並不響應傳統的History,更不用說刷新和訪問新網頁的情況了。

解決方法:
  延遲事件加載,讓頁面上加載完成后才進行popstate事件加載。
 
window.onload=function(){
  setTimeout(function(){
  window.addEventListener('popstate', function() {
    window.location.reload();
});  
},0)  
}

  

 


免責聲明!

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



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