微信 history.back 時候的 快取問題處理, 最近搞得我很頭疼
阿新 • • 發佈:2018-12-19
最近在寫微信的專案, 遇到一個很坑爹的問題, 為了更好的使用者體驗,我希望在專案中
- 點選返回按鍵的時候能返回到 某一個指定的頁面
- 返回某些頁面的時候頁面不快取
- jsp 頁面快取
- src 請求快取
- ajax 請求快取
主要操作的 api 有:
- popstate,pushstate , history.back()
- 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()
})