国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 熱點 > 微信 > 正文

解決微信內置瀏覽器返回上一頁強制刷新問題方法

2024-07-22 01:16:38
字體:
來源:轉載
供稿:網友

微信內置瀏覽器在返回上一頁面,且上一頁面包含AJAX代碼時,頁面就會被強制刷新,極度影響用戶體驗。而我們想要的效果是:返回上一頁面時,頁面還停留在原來的狀態,AJAX獲取到的數據還在,滾動條也在原來的位置。

BINGO~

通過HTML5的history API + 緩存可以做到這一點。

執行原理:

1.0、通過history API的 history.pushState或 history.replaceState 保存AJAX狀態;

2.0、同時將AJAX獲取到的數據緩存起來(可以考慮使用H5的localStorage或sessionstorage);

3.0、當返回到這個頁面時,先獲取窗口的history.state,如果不為空,表示保存的有狀態,我們要做的就是恢復到這個狀態;

4.0、讀取緩存數據并加載。如果涉及到分頁,且是滾動加載的形式,需要將當前頁設置為history.state中的頁數。

使用技術點介紹:

history API:

HTML5 history API只包括2個方法:history.pushState()和history.replaceState(),以及1個事件:window.onpopstate。

①history.pushState()

它的完全體是 history.pushState(stateObject, title, url),包括三個參數。

第1個參數是狀態對象,它可以理解為一個拿來存儲自定義數據的元素。它和同時作為參數的url會關聯在一起。

第2個參數是標題,是一個字符串,目前各類瀏覽器都會忽略它(以后才有可能啟用,用作頁面標題),所以設置成什么都沒關系。目前建議設置為空字符串。

第3個參數是URL地址,一般會是簡單的?page=2這樣的參數風格的相對路徑,它會自動以當前URL為基準。需要注意的是,本參數URL需要和當前頁面URL同源,否則會拋出錯誤。

調用pushState()方法將新生成一條歷史記錄,方便用瀏覽器的“后退”和“前進”來導航(“后退”可是相當常用的按鈕)。另外,從URL的同源策略可以看出,HTML5 history API的出發點是很明確的,就是讓無跳轉的單站點也可以將它的各個狀態保存為瀏覽器的多條歷史記錄。當通過歷史記錄重新加載站點時,站點可以直接加載到對應的狀態。

②history.replaceState()

它和history.pushState()方法基本相同,區別只有一點,history.replaceState()不會新生成歷史記錄,而是將當前歷史記錄替換掉。

③window.onpopstate

push的對立就是pop,可以猜到這個事件是在瀏覽器取出歷史記錄并加載時觸發的。但實際上,它的條件是比較苛刻的,幾乎只有點擊瀏覽器的“前進”、“后退”這些導航按鈕,或者是由JavaScript調用的history.back()等導航方法,且切換前后的兩條歷史記錄都屬于同一個網頁文檔,才會觸發本事件。

上面的“同一個網頁文檔”請理解為JavaScript環境的document是同一個,而不是指基礎URL(去掉各類參數的)相同。也就是說,只要有重新加載發生(無論是跳轉到一個新站點還是繼續在本站點),JavaScript全局環境發生了變化,popstate事件都不會觸發。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 齐齐哈尔市| 正安县| 喀喇| 塘沽区| 泰宁县| 墨竹工卡县| 改则县| 钟祥市| 三江| 怀仁县| 兴国县| 茂名市| 合水县| 吐鲁番市| 阿勒泰市| 宝山区| 行唐县| 上蔡县| 凤台县| 弥勒县| 稷山县| 巴楚县| 基隆市| 巴里| 新宁县| 门头沟区| 金门县| 阿坝县| 湖北省| 准格尔旗| 海阳市| 赤水市| 莱西市| 思茅市| 商水县| 黑山县| 黎川县| 英德市| 泉州市| 台东县| 禹州市|