1. 程式人生 > >微信 history.back 時候的 快取問題處理, 最近搞得我很頭疼

微信 history.back 時候的 快取問題處理, 最近搞得我很頭疼

最近在寫微信的專案, 遇到一個很坑爹的問題, 為了更好的使用者體驗,我希望在專案中

  1. 點選返回按鍵的時候能返回到 某一個指定的頁面
  2. 返回某些頁面的時候頁面不快取
    • jsp 頁面快取
    • src 請求快取
    • ajax 請求快取

主要操作的 api 有:

  1. popstate,pushstate , history.back()
  2. pageshow, pagehide

經過測試, 在 pc 端(模擬器)和 移動端(微信) 很多時候 history 的 表現方式是不一樣的。

1. 點選返回按鍵的時候能返回到 某一個指定的頁面

2. 返回頁面的時候 頁面不快取

不知到為什麼 meta 三種資料清除方式沒有生效 難道是 location.href 的時候才會生效?

主要通過 如下程式碼來清除 ios 和 android 快取

2.1 jsp 頁面返回清除快取

<%
response.setHeader("Cache-Control","no-store");
response.setHeader("Pragrma","no-cache");
response.setDateHeader("Expires",0);
%>


上面的 jsp 程式碼對頁面的 src 請求圖片生效了, 但是 jsp 中的其他變數資料沒有生效, 配合下面的 pageshow 程式碼 jsp 頁面就 ok 了

通用的返回清除快取方式

  var isPageHide =
false; window.addEventListener('pageshow', function() { if(isPageHide) { window.location.reload();//自己重新重新整理,這一步相當於模擬了跳轉 } }); window.addEventListener('pagehide', function() { isPageHide = true; });

新增時間戳 進行頁面更新的時候, ios 中的資料還是沒有更新, android 的中的 沒有問題, 新增 pageshow 程式碼就ok 了

新增時間戳 返回的時候清除快取

$.ajax({
	url: '...?timestamp='+ Date.now()
})