2011-08-29 85 views
3

我需要一個瀏覽器頁面來保持它的後ajax更改狀態後用戶導航離開並點擊後退按鈕返回到它。不幸的是,之前用jQuery淡化的項目是可見的或者動態添加的項目(通過ajax)在用戶點擊返回按鈕返回到頁面後消失。按下瀏覽器後退按鈕後重新加載或保持DOM狀態使用後的瀏覽器後退按鈕

我已經嘗試了20種不同的無緩存元和頭解決方案,並且沒有一款適用於Mac的Chrome 13.0.782。我也試過這裏列出的onunload解決方案:Is there a cross-browser onload event when clicking the back button?無濟於事。

理想情況下,我希望頁面狀態保持不變(所有jQuery更改爲DOM),而不必重新加載它,但我很樂意能夠在用戶重新導航時重新加載頁面。

我知道在按下後退按鈕後有多個關於重新加載的問題,但是沒有一個解決方案適用於我的情況。

回答

1

一個常見的做法,比如google所使用的做法是將一個散列值附加到url。因此,例如,你消失一些div出來後,你可以做

window.location.hash = "hide_div"; 

然後你會放一個onHashChange聽衆

$(window).bind('hashchange', function() { 
    var hash_value = window.location.hash; 

    if (hash_value === 'hide_div') 
     // hide certain divs 
}); 

P.S這對於維護國家AJAX一個非常粗糙的花紋。

編輯:我建議也看看HTML5中的歷史API。

+1

我想存儲一個散列值來重新加載頁面,當用戶導航回到它,但我需要觸發一個事件,當他們回到頁面檢查散列。任何想法如何綁定到那? – elkelk

+0

這就是 - > $(window).bind('hashchange'...它會監聽散列更改事件,當您單擊後並且散列值發生更改時會觸發該散列更改事件,之後您可以獲取散列值 –

+0

哦,我想你誤解了這個問題,當用戶轉到任何不同的頁面,然後點擊瀏覽器的返回按鈕返回到我的頁面時,我需要重新加載,在一堆jQuery事件發生後,點擊回到頁面 – elkelk

1

你需要真正簡單的歷史:

http://code.google.com/p/reallysimplehistory/

編輯:或者你可以藏匿BODY的innerHTML,它在window.name存儲爲一個字符串,使用onbeforeunload事件。然後設置一個cookie,以便在頁面重新加載時檢測到cookie,並且可以將window.name的值返回到BODY

+0

我不需要跟蹤或撤消ajax操作。這會有點矯枉過正。我只需要頁面的外觀與當用戶點擊後退按鈕返回時離開頁面時的外觀相同。 – elkelk

+0

查看我上面的編輯。 –

0

如果你只是想在後退按鈕上從服務器獲取pagerefresh,請使用cache-control'no-store,no-cache,must-revalidate'。

Chrome想要無存儲,並且IE想要重新驗證。對於其他瀏覽器(和W3C),no-cache就足夠了。