2011-09-12 88 views
3

我構建了一個使用AJAX和HTML5歷史記錄的Web應用程序(舊版瀏覽器具有後退功能,history.js)。HTML5歷史記錄:整頁加載後的後退按鈕出現問題

只有我的應用程序的一部分通過背景JavaScript加載(部分是相當沉重,將在大多數時間使用)。其他頁面通過常規鏈接訪問,當加載這些頁面時將發生整頁重新加載。

當我稍微瀏覽一下動態部分(URL變化並且適合顯示的內容)時,通過常規鏈接離開它,然後點擊瀏覽器後退按鈕,發生一些奇怪的事情:只有在最後一次XHR中加載的部分(在我的情況下,包含一些數據的div)顯示沒有佈局和CSS。當我查看源代碼(在Chromium和FF + Firebug中)時,DOM只包含所述的div。我希望瀏覽器緩存DOM和其他信息,所以它能夠重建上一頁,或者它會重新加載最後一個URL(頁面將按預期顯示,因爲如果它沒有加載通過XHR它將在佈局內呈現)。我試圖在XHR的響應上設置緩存控制標題,但它沒有幫助。

我放在一起小例子http://moserei.de/html5_history/

謝謝您的幫助!

+0

該示例是404.你可以上傳文件到github什麼的?希望你仍然擁有它們。 – luckydonald

回答

2

我剛纔調查了一下,發現了自己的問題。 Rails似乎並不擅長設置正確的緩存控制標題。當我自己設置它們(cache-control,pragma = no-cache並且過去到期,請參閱第一個回答here)時,瀏覽器會尊重它並在常規請求中重新加載頁面。

0

這是在名稱的衝突:

原始頁面有2個狀態,佔用2個網址:

  1. http://moserei.de/html5_history/
  2. http://moserei.de/html5_history/xhr.html

http://moserei.de/html5_history/xhr.html的XHR請求有不同的反應除原始頁面外。現在,這個URL http://moserei.de/html5_history/xhr.html與兩兩件事有關:

  1. 原始URL內的狀態
  2. 分離的內容通過XHR發送

時,它需要從抓取該網址應該採取什麼瀏覽器做緩存(當你點擊後退按鈕)?這很難說。我不確定歷史規範中是否有明確定義的規則,所以試着避免這一點。

+0

你說得對,URL http:// moserei.de/html5_history/xhr.html代表兩種不同的東西。但在我看來,瀏覽器不應該直接顯示通過XHR加載的內容。因此,它應該嘗試定期重新加載它,當XHR禁止緩存的響應標題(請參閱我自己的答案)時它會執行此操作。 –

+1

如果用戶通過AJAX訪問'/ xhr.html'然後刷新頁面怎麼辦?用戶期望顯示相同的內容。因此,當您使用History API在URL之間切換時,通常您應確保通過AJAX狀態更改和完整頁面請求都可以訪問每個URL。 –

相關問題