我發現,如果我再回到提問按我的瀏覽器的後退按鈕頁面標題或身體部分被記住。SO的形式如何記住以前的輸入值?
此功能在我測試的所有瀏覽器中都可用,但在我自己的項目中不存在。
我該如何解決這個問題?
UPDATE
我仍然沒有任何線索還沒有,但你猜它是某種形式的客戶端緩存的通過HTTP頭或JavaScript?
我發現,如果我再回到提問按我的瀏覽器的後退按鈕頁面標題或身體部分被記住。SO的形式如何記住以前的輸入值?
此功能在我測試的所有瀏覽器中都可用,但在我自己的項目中不存在。
我該如何解決這個問題?
UPDATE
我仍然沒有任何線索還沒有,但你猜它是某種形式的客戶端緩存的通過HTTP頭或JavaScript?
它與您的頁面的緩存屬性有關。
1)如果瀏覽器被允許緩存你的頁面,它也會記住表單域。
2)如果不允許緩存頁面,它會忘記一切。
通常,動態生成的頁面屬於類別2,因此您看不到緩存。 這確實是由HTTP標頭確定的(特別是Cache-Control和Last-Modified,或使用E-Tags )。有關瀏覽器如何確定緩存(!不平凡的)的解釋,見例如:
http://www.webscalingblog.com/performance/caching-http-headers-last-modified-and-etag.html
但最簡單的就是把形式的靜態HTML頁面,那麼你的網絡服務器將處理一切。
我不能把表單放在一個靜態的HTML頁面上, '不知道爲什麼'cache-control'自動設置爲'\t無存儲,no-cache,必須重新驗證,post-check = 0,pre-check = 0','Pragma'設置爲'no- cache'。 – user198729 2010-05-03 16:10:10
緩存控制設置爲動態頁面的這些值,因爲(通常)您希望用戶每次都看到新生成的頁面,以確保他能看到最新的信息。否則,您可以從腳本中提供不同的Cache-Control標頭。更具體地說,我需要知道你用什麼語言來生成頁面。 – wump 2010-05-04 09:20:52
@wump:Web瀏覽器應如何預先填充輸入值,是否有標準規範?還是瀏覽器實現這個「他們覺得」? – 2014-07-29 15:20:24
沒有魔法。剛剛嘗試下面的HTML:
<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Test</title>
</head>
<body>
<input type="text" name="title" value="" />
<a href="http://www.google.com">Google</a>
</body>
</html>
打開它在瀏覽器中輸入一些文字,點擊該鏈接,然後後退按鈕,它會記住的價值。經過測試並正在使用IE8,FireFox 3.6,Chrome 4.
我沒有看到任何特別的東西,你能解釋它爲什麼有效嗎? – user198729 2010-05-03 15:18:48
這可能適用,因爲它在本地文件系統上沒有Web服務器時被查看。 – 2011-08-08 15:24:20
@ user198729:''它與你的頁面的緩存屬性有關。''看'wump'的答案(目前接受的答案) – 2014-07-29 15:15:28
雖然我真的不能給太多書於的「提問」頁面的HTTP頭看起來是這樣的:
HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
Vary: Accept-Encoding
Server: Microsoft-IIS/7.5
Set-Cookie: [EDITED AWAY}
Date: Mon, 03 May 2010 16:04:44 GMT
Content-Length: 4800
我比較,爲自己的頁面/形式,尤其是任何頭處理緩存和過期。
我沒有設置任何標題信息,似乎我的Web服務器自動爲我添加緩存策略,這不是我所期望的。 – user198729 2010-05-03 16:16:04
您需要找到一種機制來在您所服務的頁面上設置Cache-Control
參數。
您不指出如何提供網頁。但是,在這裏是一個ASP頁面, 導致表格內容用後退按鈕返回到頁面時消失的例子(這是 目前您所遇到的行爲):
<% Response.CacheControl = "no-cache" %>
<% Response.AddHeader "Pragma", "no-cache" %>
<% Response.Expires = -1 %>
<HTML>
<HEAD>
<TITLE>Test page</TITLE>
</HEAD>
<BODY>
Type some text into this box, click SO followed by the BACK button:
<input type="text" name="title" value="" />
<a href="http://www.stackoverflow.com">SO</a>
<p>
When you get back the text you typed will be gone.
</BODY>
</HTML>
注的前3名行,做一些小的修改......
<% Response.CacheControl = "private" %>
<HTML>
<HEAD>
<TITLE>Test page</TITLE>
</HEAD>
<BODY>
Type some text into this box, click SO followed by the BACK button:
<input type="text" name="title" value="" />
<a href="http://www.stackoverflow.com">SO</a>
<p>
When you get back the text you typed will still be there
</BODY>
</HTML>
現在輸入字段內容被保留。 這是你正試圖實現的行爲。有 可能需要額外的參數設置太取決於您的具體 的需求和您的服務器應用的默認值。
用於緩存控制的進一步的細節可在:
Cache Control in ASP。與微軟的大多數事情一樣,它只討論IE瀏覽器,即 。
關於Caching的教程可以很好地介紹幾種不同的Web服務器(包括PHP)的示例代碼。
w3.org是您真正需要研究的參考,特別是關於Cache-Control的第14.9節。
獲取您正在查找的 行爲的關鍵在於使用正確的緩存控制參數化服務頁面。
此功能通常由您的瀏覽器處理。 – 2010-05-01 12:58:13
那爲什麼我的項目在同一瀏覽器中不存在這個功能?不同的目的必須發生不同的事情。 – user198729 2010-05-01 16:00:37
人們可能會告訴你如何配置你的服務器來提供正確的緩存相關的http頭文件,如果你包含的信息與提供頁面的服務器軟件相關。每個服務器都有自己的配置,用於這些事情... – vkraemer 2010-05-10 05:53:30