關於微信“被返回頁”在被返回時自動重新整理

eedc發表於2018-07-26

網上有很多這些文章,但我覺得沒一篇真正解決這個問題,倒是能給人一個解決方案的思路,對,就是posState事件。 
要解決這個問題也不難,使用history的replaceState屬性替換當前網頁連結(其實作用是在不增加history長度的基礎上,仍然使用當前網面連結不能使用popState,因為它的作用是增加了history的長度,後退時會出錯,往往跳不出迴圈)。 
完整程式碼如下:

$(function() {
        pushHistory();
    });
    function pushHistory() {
        window.addEventListener("popstate", function(e) {
//          alert("後退");
            self.location.reload();
        }, false);
        var state = {
            title : "",
            url : "#"
        };
        window.history.replaceState(state, "", "#");
    };

 

ps: 
1.popState事件只有在作用go(-1),back(),forward()等操作時才會觸發。 
2.重點是self.location.reload();,後退後重新整理當前頁面。其它人寫的文章裡缺少這一塊,弄的我很是鬱悶。 
3.微信裡在監聽到iphone後退事件後會觸發popState事件,在PopState事件裡執行:self.location.reload();即可重新整理後退後的頁面。

 

 

網站建設過程中,提交頁面後我們經常要用到window.history.go(-1)返回上一頁,因為頁面的快取功能,我們只能返回上次操作的頁面,但在刪除等操作中,我們希望實時看到刪除專案後的頁面,這就要用到同時重新整理技術,下面我們總結總結一下常用的幾種window.history.go(-1)返回頁面後實時重新整理技術。

返回上一頁程式碼:

<a href="Javascript:window.history.go(-1)">返回上一頁</a> 
 

1.強制載入後重新整理一次

我們可以仿照C++中解決標頭檔案重複包含的方法,在C++中利用#ifndef A #define A #endif來解決標頭檔案的重複包含問題同樣我們採用如下方式

if(window.name != "bencalie"){
    location.reload();
    window.name = "bencalie";
}
else{
    window.name = "";
}

 

進行載入後強制重新整理一次,相信如果你有程式設計經驗一定看的懂的,這裡不做解釋!

2.禁止快取,重新載入一次

在前一頁頭部加上

<meta http-equiv="Expires" CONTENT="0">
<meta http-equiv="Cache-Control" CONTENT="no-cache">
<meta http-equiv="Pragma" CONTENT="no-cache">

 

或者

<%
   Response.Buffer=True   
   Response.ExpiresAbsolute=Now()-1  
   Response.Expires=0   
   Response.CacheControl="no-cache"
%>

 


都可以實現重新整理。

 

參考:

https://blog.csdn.net/achenyuan/article/details/77769992

https://blog.csdn.net/bcqtt/article/details/51670461

相關文章