保留表单数据的策略(在选项卡/浏览器关闭时)

时间:2009-10-19 15:46:07

标签: forms onbeforeunload onunload saving-data

我遇到了一个任务管理应用程序的问题,偶尔用户会关闭他们的浏览器/标签以及他们输入的信息因为意外关闭浏览器/标签而丢失,导致他们输入的文本丢失(有些人可以花半个小时输入文字。)

所以我必须提供一个解决方案,我有一些想法,但想要最好的输入,或者如果你有更好的解决方案让我听到你。

选项1:

  • window.onunload或可能window.onbeforeunload事件上调用confirm()对话框,首先测试任务日志记录区域中是否包含任何文本但不是空白。如果它不是空白,则调用window.confirm()并询问用户是否要在不保存日志的情况下关闭选项卡/窗口。

我对选项#1的关注是它可能是用户干扰。

选项2:

  • 在同一事件中,不要调用任何confirm(),而是强行将文本保存在cookie中的任务日志记录区域中。然后可能会提供一个按钮,尝试从同一页面上的cookie恢复任何已保存的任务信息,因此点击该按钮会使其解析cookie并检索信息。

3 个答案:

答案 0 :(得分:6)

window.onbeforeunload事件有点奇怪。如果为其定义处理程序,浏览器将显示关于通过导航离开页面而丢失数据的一般消息,并将从处​​理函数返回的字符串插入到消息的中间。见这里:

alt text http://img291.imageshack.us/img291/8724/windowonbeforeunload.png

所以我们做的是:当我们知道页面上的内容未保存时,我们设置:

window.onbeforeunload = function(){
 return "[SOME CUSTOM MESSAGE FROM THE APP]";
}

一旦用户保存,我们就知道我们不需要向他们展示消息,我们设置:

window.onbeforeunload = null;

它有点干扰,但它比用户意外丢失数据更好。

答案 1 :(得分:2)

我会研究您正在使用的特定Web服务器/语言的AJAX框架。 AJAX允许您在输入时保存表单数据(例如,Google Docs的工作方式)。

答案 2 :(得分:2)

如果用户在提交他们正在做的事情之前足够愚蠢地离开,那么他们就不应该介意他们是否打算做一些显然是愚蠢的事情。

此外,SO使用确认对话框导航,此处的大多数(某些)用户非常聪明。

这是最容易使用的,可能会对用户提供更多帮助。

如果有人写了很长的文字,然后在不提交的情况下关闭浏览器,他们可能会更乐意在那里对问题进行排序,而不是在第二天早上发现他们没有这样做......