如何在页面重新加载时清除HTML表单,而不是在用户导航回页面时清除?

时间:2009-08-14 20:38:55

标签: javascript html reload back-button

我正在使用以隐藏形式存储某些数据的技巧,以便能够持久保存它,以便当用户离开页面然后使用BACK按钮返回时我可以将数据恢复到页面没有再次点击服务器......

但是,这个技巧意味着当用户点击刷新或重新加载时会发生同样的事情...(甚至在Firefox中进行shift-reload)。我想检测用户是否正在点击重新加载而不是单击后退按钮,以便我可以重新开始重新加载但仍然可以在用户导航和返回时恢复以前的数据。

有办法做到这一点吗?我一直在调查onbeforeunload事件等,但还没有想出任何东西。

编辑解决乔希的问题“为什么?”:

该页面是一个包含大量AJAX过滤器的搜索结果页面。用户可能花了相当多的时间来调整过滤器以获得他们想要的搜索结果集...然后,如果他们要么离开页面或在URL栏中输入新地址...然后回到页面,如果我不做这样的事情,他们将不得不重新开始并再次进行所有过滤。对于我们为可用性测试带来的用户来说,这是一次非常令人沮丧的经历。

这是一个精通技术的用户可以通过打开一个新标签而不是点击/输入来解决的问题,但不幸的是,绝大多数用户并不精通技术,所以显而易见的解决方案就是拥有页面在用户导航回页面时恢复过滤器/结果。

另一方面,我可以想到为什么用户可能会重新加载页面有两个原因:

  1. 搜索页面上的搜索结果中包含时间敏感元素,用户可能希望获得更多最新结果。
  2. 有时可能会出现页面无法正确加载的错误。在这两种情况下,如果我将页面恢复到已保存状态,它们将获得相同(旧的和/或损坏的)结果,而不是他们期望的新鲜/固定结果。
  3. 希望能够解决它。

3 个答案:

答案 0 :(得分:2)

您可以通过查看随请求发送的标头在服务器端执行此操作。当用户执行刷新或硬刷新时,会使用某些标头。

使用Fiddler或Firebug检查标题以查看您可以使用的内容。

至少对于Firefox,点击F5会导致

Cache-Control: max-age=0

要发送的标头。执行Ctrl-F5发送这些

Pragma: no-cache
Cache-Control: no-cache

有关其他浏览器行为的细分,请查看this excellent answer以查看其他问题。

答案 1 :(得分:1)

如果您无法获得基于表单的工作方法,您可能需要调查一个“ajax历史记录”库,如RSH

答案 2 :(得分:0)

当我加载包含表单的页面时,我会像以前一样填写我之前存储过的值,但随后会从我的会话中清除该数据。第二页刷新将找不到存储的数据并提供空白表单。如果重新提交表单,那么我将新数据存储回会话中,准备按下后退按钮...