這是由back-forward cache造成的。它應該在用戶導航時保存頁面的完整狀態。當用戶使用後退按鈕瀏覽頁面時,可以非常快速地從緩存加載。這與僅緩存HTML代碼的普通緩存不同。
當頁面加載bfcache onload
事件不會被觸發。相反,您可以檢查onpageshow
事件的persisted
屬性。它在初始頁面加載時設置爲false。當頁面從bfcache加載時,它被設置爲true。
window.onpageshow = function(event) {
if (event.persisted) {
alert("From back/forward cache.");
}
};
由於某種原因,jQuery在事件中沒有這個屬性。你可以從原始事件中找到它。
$(window).bind("pageshow", function(event) {
if (event.originalEvent.persisted) {
alert("From back/forward cache.");
}
});
快速解決這些問題的方法是在按下返回按鈕時重新加載頁面。但是,這會使後退/前進緩存所帶來的積極效果無效。
window.onpageshow = function(event) {
if (event.persisted) {
window.location.reload()
}
};
一點題外話,你可以看到很多人使用空onunload
處理程序解決方案,提供的網頁。這從iOS5開始並沒有奏效。
$(window).bind("unload", function() { });
如果還沒有出現,您可能會嘗試在所有鏈接網址後添加'?'。例如:'href =「next.html」'變成'href =「next.html?」'。這會給Web瀏覽器提示頁面內容是動態的,並再次進入該頁面應該再次從服務器重新加載頁面。這也應該應用於外部腳本。例如:'src =「mylib.js」'變成'src =「mylib.js?」'。 – Jay 2012-09-18 06:52:22