原因分析:
一.android 瀏覽器 包括微信的開發者工具 都是ok的返回可以刷新頁面但是唯有iOS不行.
二.iOS 瀏覽器原因:history.go(-1)返回上一頁后,頁面內容並不會刷新。在B頁面修改的內容,返回到A時並沒有更新新的內容,必須手動刷新。
在Debug模式下,發現在iOS瀏覽器中,返回上一頁后,頁面的 JS 代碼並未執行。我們猜測可能是緩存引起的,於是使用 meta 禁止了緩存,但仍然沒有效果。於是進一步猜測可能是瀏覽器內部機制導致——iOS為了提升瀏覽網頁的效率,可能給已瀏覽過的網頁添加一個類似快照的東西,當點擊返回按鈕后,直接調用快照展示給用戶,省去了執行JS這一步驟(純靜態文件依然被緩存)。這本來是iOS的優勢,在這卻變成了bug存在的風險.
三.頁面數據是通過 ajax 請求后台數據,通過鏈接跳到下一頁,然后返回,
最常用的返回上一頁的方法:history.go(-1)和 history.back(),
在 android 中正常顯示上一頁,但是在 iOS 中不能正常顯示,通過打印
一.android 瀏覽器 包括微信的開發者工具 都是ok的返回可以刷新頁面但是唯有iOS不行.
二.iOS 瀏覽器原因:history.go(-1)返回上一頁后,頁面內容並不會刷新。在B頁面修改的內容,返回到A時並沒有更新新的內容,必須手動刷新。
在Debug模式下,發現在iOS瀏覽器中,返回上一頁后,頁面的 JS 代碼並未執行。我們猜測可能是緩存引起的,於是使用 meta 禁止了緩存,但仍然沒有效果。於是進一步猜測可能是瀏覽器內部機制導致——iOS為了提升瀏覽網頁的效率,可能給已瀏覽過的網頁添加一個類似快照的東西,當點擊返回按鈕后,直接調用快照展示給用戶,省去了執行JS這一步驟(純靜態文件依然被緩存)。這本來是iOS的優勢,在這卻變成了bug存在的風險.
三.頁面數據是通過 ajax 請求后台數據,通過鏈接跳到下一頁,然后返回,
最常用的返回上一頁的方法:history.go(-1)和 history.back(),
在 android 中正常顯示上一頁,但是在 iOS 中不能正常顯示,通過打印
返回的數據,發現數據是上一個頁面最后請求的數據。
解決方法:
在回退后需要刷新的頁面加以下js:
$(function () {
var isPageHide = false;
window.addEventListener('pageshow', function () {
if (isPageHide) {
window.location.reload(); //刷新頁面
//刷新 方法
}
});
window.addEventListener('pagehide', function () {
isPageHide = true;
});
})
作者:上善_若水
鏈接:https://www.jianshu.com/p/b5c2d8b09682