移動端popstate的怪異行爲

因爲ios的性能在緩存頁面比較好,因此通常頁面的後退都會保存以前的歷史頁面,javascript

不會觸發頁面上的js等,因此能夠觸發到popstate事件,而webkit的某些版本對popstatejava

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

因此popstate就被觸發了,而在項目中須要IOS一個後退刷新頁面web

代碼:瀏覽器

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)  
}
相關文章
相關標籤/搜索