武漢兼職女:點擊瀏覽器或者手機返回按鈕,重新整理曆史頁面解決方案

來源:互聯網
上載者:User

標籤:清除   nload   nts   否則   inner   ati   cat   on()   else   

武漢兼職女:點擊瀏覽器或者手機返回按鈕,重新整理曆史頁面解決方案

我前面文章中寫了返回上一頁並重新整理頁面 的方式。這個是我們點擊某個按鈕,來進行操作的。但是假如我們不是點擊某個按鈕,而是直接點擊手機下面的返回按鈕或者瀏覽器內建返回按鈕,如何重新整理之前的曆史頁面呢?

應用情境
假如我們有如下頁面列表資訊頁面

enter image description here

點擊進入詳情頁面,在詳情頁面修改了資料。

enter image description here

通過曆史返回,再返回到列表資訊頁面,因為列表資訊是曆史返回的,還是預設顯示原來修改前的資料,要重新整理一下才是修改後的資料。那麼我們通過什麼方式可以點擊手機返回按鈕或者瀏覽器返回,就能重新整理之前曆史頁面中的資料呢?

相關知識
onpageshow事件和onload事件。 onpageshow 事件類別似於 onload 事件,onload 事件在頁面第一次載入時觸發, onpageshow 事件在每次載入頁面時觸發,即 onload 事件在頁面從瀏覽器緩衝中讀取時不觸發。

為了查看頁面是直接從伺服器上傳入還是從緩衝中讀取,你可以使用 PageTransitionEvent 對象的 persisted 屬性來判斷。 如果頁面從瀏覽器的緩衝中讀取該屬性返回 ture,否則返回 false

解決方案
一、通過onload方式

代碼如下:

頁面中寫一個隱藏的input

<input type="hidden" id="refreshed" value="no">
js操作如下

onload=function(){
var refreshedId=document.getElementById("refreshed");
if(refreshedId.value=="no"){
refreshedId.value="yes";
} else{
refreshedId.value="no";
location.reload();
}
}
二、通過onpageshow 方式

這種方式在電腦上是沒有問題的,但是蘋果safari中返回不執行onload事件,要用如下方式:

window.onpageshow = function(event) {
if (event.persisted) {
window.location.reload()
}
};
通過實際操作發現,event.persisted在電腦中一直是返回false,但是在手機safari中是沒有問題的。

三、綜合解決方案

因此,可以如下寫代碼:

if ((/iphone|ipod|ipad.*os 5/gi).test(navigator.appVersion)) {
window.onpageshow = function(event) {
if (event.persisted) {
window.location.reload()
}
};
}else{
onload=function(){
var refreshedId=document.getElementById("refreshed");
if(refreshedId.value=="no"){
refreshedId.value="yes";
} else{
refreshedId.value="no";
location.reload();
}
}
}
通過上面代碼發現在safari中第一次開啟頁面的時候,有時候會出現閃屏效果。

添加如下代碼:

$(window).bind("unload", function() { });
就沒有再出現閃屏效果了。

4、通過iframe方式阻止緩衝

頁面中添加如下代碼

<iframe style="height:0px;width:0px;visibility:hidden" src="about:blank">
this prevents back forward cache
</iframe>
這種方式有待驗證。

5、清除緩衝方式

我之前部落格中也寫過清除瀏覽器緩衝的幾種方式,武漢兼職女www.rfwcom.com/forum-81-1.html但是這種方式,經過驗證,不起作用。

6、通過時間戳記強制重新整理方式

下面代碼是針對iPad中safari返回按鈕問題

var showLoadingBoxSetIntervalVar;
var showLoadingBoxCount = 0;
var showLoadingBoxLoadedTimestamp = 0

function showLoadingBox(text) {

var showLoadingBoxSetIntervalVar=self.setInterval(function(){showLoadingBoxIpadRelaod()},1000);
showLoadingBoxCount = 0
showLoadingBoxLoadedTimestamp = new Date().getTime();

//Here load the spinner

}

function showLoadingBoxIpadRelaod()
{
//計算時間超過500毫秒
var diffTime = ( (new Date().getTime()) - showLoadingBoxLoadedTimestamp - 500)/1000;

showLoadingBoxCount = showLoadingBoxCount + 1;
var isiPad = navigator.userAgent.match(/iPad/i) != null;

if(diffTime > showLoadingBoxCount && isiPad){
location.reload();
}
}

武漢兼職女:點擊瀏覽器或者手機返回按鈕,重新整理曆史頁面解決方案

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.