我正在使用以隐藏形式存储某些数据的技巧,以便能够持久保存它,以便当用户离开页面然后使用BACK按钮返回时我可以将数据恢复到页面没有再次点击服务器......
但是,这个技巧意味着当用户点击刷新或重新加载时会发生同样的事情...(甚至在Firefox中进行shift-reload)。我想检测用户是否正在点击重新加载而不是单击后退按钮,以便我可以重新开始重新加载但仍然可以在用户导航和返回时恢复以前的数据。
有办法做到这一点吗?我一直在调查onbeforeunload事件等,但还没有想出任何东西。
编辑解决乔希的问题“为什么?”:
该页面是一个包含大量AJAX过滤器的搜索结果页面。用户可能花了相当多的时间来调整过滤器以获得他们想要的搜索结果集...然后,如果他们要么离开页面或在URL栏中输入新地址...然后回到页面,如果我不做这样的事情,他们将不得不重新开始并再次进行所有过滤。对于我们为可用性测试带来的用户来说,这是一次非常令人沮丧的经历。
这是一个精通技术的用户可以通过打开一个新标签而不是点击/输入来解决的问题,但不幸的是,绝大多数用户并不精通技术,所以显而易见的解决方案就是拥有页面在用户导航回页面时恢复过滤器/结果。
另一方面,我可以想到为什么用户可能会重新加载页面有两个原因:
希望能够解决它。
答案 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)
当我加载包含表单的页面时,我会像以前一样填写我之前存储过的值,但随后会从我的会话中清除该数据。第二页刷新将找不到存储的数据并提供空白表单。如果重新提交表单,那么我将新数据存储回会话中,准备按下后退按钮...