2011-06-30 251 views
0

我在onClick的HTML按鈕上編寫以下代碼;javascript中的瀏覽器歷史記錄

javascript:history.go(-1) 

它不進入歷史頁面。相反,它會顯示以下...

網頁已過期

最有可能的原因:該網頁的本地副本是過時的,並且網站要求您重新下載。

你可以嘗試: 點擊工具欄上的刷新按鈕重新加載頁面。刷新後,您可能需要再次導航到特定的網頁,或重新輸入信息。

enter image description here

+0

Demo?.......... –

+0

@Felix Kling:添加圖片... –

+0

聽起來像之前的網頁發送「無緩存」標題,MSIE選擇了跟隨他們的宗教。但問題在哪裏,你究竟在問什麼? –

回答

0

這沒有什麼關係的JavaScript,它要麼有將先前包含POST數據(見Boldewyn的答案)頁面做什麼或它與HTTP頭做被設置爲阻止緩存的頁面發送,特別是通過Cache-Control標題。請注意,如果您在localhost上執行此操作,您可能會獲得與將其上傳到服務器時不同的行爲。

See here爲了很好的參考。指定一個表示將被認爲新鮮的最大時間量 -

最大年齡= [秒]:

有用的緩存控制響應頭包括:我將在任何情況下copypasta的重要位。與Expires類似,該指令與請求的時間相關,而不是絕對的。 [秒]是從希望表示爲新鮮請求的時間開始的秒數。

public - 標記已認證的響應爲可緩存的;通常,如果需要HTTP身份驗證,響應會自動保密。

私有 - 允許特定於一個用戶(例如,在瀏覽器中)的高速緩存存儲響應;共享高速緩存(例如,在代理中)可能不是。

no-cache - 每次釋放緩存副本之前強制高速緩存向原始服務器提交請求以進行驗證。這有助於確保認證(與公共結合)得到尊重,或者保持嚴格的新鮮度,而不會犧牲高速緩存的所有好處。

例如:

Cache-Control: max-age=3600, must-revalidate 
+0

我認爲,IE的錯誤信息在這裏有誤導性。這很可能是POST vs GET問題。如果它是一個簡單的過期緩存,IE只會重新獲得它。看到我的答案。 – Boldewyn

0

這是最有可能的情況下,如果在上一個頁面與一個HTTP POST請求接收。在JavaScript級別上幾乎沒有什麼可以對付它。

問題是,POST請求用於更改的東西。所以,如果瀏覽器再次發送相同的請求,它會再次提交相同的更改信息。這可以像雙重評論一樣簡單,並且像兩次轉移10000美元一樣具有破壞性。

如果你能控制好前一頁,你必須這樣做:

Browser: POST prev-site 
You -> deliver a redirect to prev-site (hence force a GET request) 
     instead of directly showing it 
Browser: GET prev-site 
User: Clicks link to this-site 
Browser: GET this-site 
User: history.go(-1) 
Browser: GET prev-site 
All: rejoice! 
0

爲了避免「網頁已經過期」的消息,你可以添加方法=「讓」給你的元素,從POST切換到得到。

注意,這會將形式參數的URL,而不是在HTTP請求的身體。

在相關說明中,當通過HTTP執行相同的確切操作時,「網頁已過期」消息似乎通過HTTPS發生。