爲了提高我網站的性能/響應能力,我使用AJAX,replaceState,pushState和popstate監聽器實現了部分頁面加載。HTML5歷史API部分頁面加載後退按鈕
我基本上將我的頁面的中心部分(HTML)作爲我的狀態對象存儲在歷史記錄中。當點擊一個鏈接時,我只需要從服務器獲取頁面的中心位(用不同的Accept頭標識這些請求)並用javascript代替它。在popstate上,我抓住了前面的中心部分,並將它推回到dom中。
這大多工作正常,但我發現了一個特定的問題,我卡住了。這是一個有點複雜的解釋,所以我很抱歉,如果這不是很清楚。
在我們的大部分網頁上都有搜索表單。通過ajax的部分頁面加載僅在GET請求上,並且表單執行POST,導致整頁加載。
如果我瀏覽下面的一組頁面,我結束了由ONLY中心內容格式不正確的部分頁面上,沒有任何周圍的DOM:
開始在主頁上(通過全頁負載) - 進行搜索(重定向後得到)
帶您到搜索結果(通過全頁面加載) - 然後點擊首頁
返回到主頁(通過動態GET) - 點擊瀏覽器的後退
搜索結果(來自popstate listener) - 點擊瀏覽器返回
格式不正確的家庭頁面即
當出現格式錯誤的主頁時,我的popstate偵聽器根本不存在。
我認爲正在發生,主頁的第二次加載(動態,部分)正在被瀏覽器緩存,然後當整頁返回時,瀏覽器僅顯示緩存的部分反應而不是整頁。
要嘗試解決這個我添加了一個有所不同:接受頭的響應,讓瀏覽器知道的內容可基於在接受頭。我還將Cache-Control max-age = 0,雜注無緩存和過期失效日期添加到部分加載的內容,以試圖強制瀏覽器不緩存此內容,但是這些都無法解決此問題。
不幸的是,我的公司不允許外部流量到我們的開發服務器,所以我不能告訴你這個問題。我在這裏查看了各種類似的問題,但沒有一個看起來完全相同,所提出的解決方案似乎也沒有工作。
如果我添加一個毫無意義的參數(廢話=等等),以我的動態GET請求,這解決了這個問題。然而,這是一個醜陋的黑客,我寧願不做。這看起來應該可以通過頭文件解決,因爲我認爲這是一個緩存問題。任何人都可以解釋發生了什麼?
快速更新 - 標題似乎可以解決Firefox上的問題,但它仍然存在於Chrome和iOS Safari上(webkit問題可能?) –
它聽起來像是一個緩存問題。給動態GET請求添加一個參數似乎是合理的 - 這就是jquery-pjax所做的。 –