Html 那么';s窗体是否还记得以前的输入值?
我注意到,如果我通过按浏览器的后退按钮返回到提问页面,则会记住标题或正文部分 此功能在我测试的所有浏览器中都可用,但在我自己的项目中的表单中不存在 我怎样才能达到这种效果 更新Html 那么';s窗体是否还记得以前的输入值?,html,forms,webbrowser-control,browser-cache,Html,Forms,Webbrowser Control,Browser Cache,我注意到,如果我通过按浏览器的后退按钮返回到提问页面,则会记住标题或正文部分 此功能在我测试的所有浏览器中都可用,但在我自己的项目中的表单中不存在 我怎样才能达到这种效果 更新 我仍然没有任何线索,但我猜某种由http头或javascript启用的客户端缓存是没有魔力的。只需尝试以下HTML: <?xml version="1.0"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://ww
我仍然没有任何线索,但我猜某种由http头或javascript启用的客户端缓存是没有魔力的。只需尝试以下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上测试和使用。这与页面的缓存属性有关 1) 如果允许浏览器缓存页面,它还将记住表单字段 2) 如果不允许缓存页面,它将忘记所有内容 通常,动态生成的页面属于类别2,因此您看不到缓存。 这确实是由HTTP头(尤其是缓存控制和上次修改)或使用E标记确定的 )。有关浏览器如何确定缓存(非平凡!)的说明,请参见示例:
但最简单的方法是将表单放在一个静态HTML页面上,然后您的Web服务器将处理所有事情。虽然我不能给出太多建议,“提问”页面的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
我会将其与您自己的页面/表单进行比较,尤其是与缓存和过期相关的任何标题。您需要找到一种机制来设置所服务页面上的
缓存控制参数
您没有指明如何为网页提供服务。但是,下面是一个ASP页面的示例
使用“后退”按钮返回页面时,会导致表单内容消失(这是
您当前正在经历的行为):
测试页
在此框中键入一些文本,然后单击“上一步”按钮:
当你回来时,你键入的文本将消失。
注意上面的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>
测试页
在此框中键入一些文本,然后单击“上一步”按钮:
当你回来时,你键入的文本仍将在那里
现在,输入字段内容被保留。
这就是你想要达到的行为。那里
根据您的具体情况,可能还需要设置其他参数
需要和服务器应用的默认值
有关缓存控制的更多详细信息,请访问:
。与微软的大多数产品一样,它只是
讨论IE
关于的本教程提供了几个不同web服务器的示例代码,包括PHP
你的推荐信是什么
确实需要学习,特别是关于缓存控制的第14.9节
获得成功的关键
您要查找的行为是在使用正确的缓存控件参数化服务页面中。此功能通常由您的浏览器处理。那么为什么我自己的项目在同一浏览器中不存在此功能?不同的目的一定会发生。如果您在提供页面服务的服务器软件中包含相关信息,人们可能会告诉您如何配置服务器以提供正确的缓存相关http头。对于这类事情,每台服务器都有自己的配置……如果您想完全不依赖于缓存,即让表单数据保存下来,甚至可以转到另一个页面,然后再转到您的页面,一旦触发某个输入字段的onchange事件,就可以将数据存储在cookie或服务器端会话中。加载表单时,您只需将默认值设置为存储的值。我看不出表单有什么特殊之处,您能解释一下它为什么工作吗?这可能是因为它是在本地文件系统上没有Web服务器的情况下查看的。@user198729:“它与页面的缓存属性有关。”
请参阅wump
的答案(目前接受的答案)我无法将表单放在静态HTML页面上,我不知道为什么缓存控件
会自动设置为“无存储、无缓存、必须重新验证、后检查=0、预检查=0,并且Pragma`设置为无缓存
。缓存控件设置为动态页面的那些值,因为(通常)您希望用户每次都能看到一个新生成的页面,以确保他看到最新的信息。如果没有,您可以从脚本中提供一个不同的缓存控件头。更具体地说,我需要知道生成页面所使用的语言。@wump:是否有关于web浏览器如何预填充输入值的标准规范?或者我没有设置任何标题信息,似乎我的web服务器自动为我添加了缓存策略,这不是我想要的。
<% 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>