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

Forms 保存表单数据的策略(在选项卡/浏览器关闭时),forms,onbeforeunload,onunload,saving-data,Forms,Onbeforeunload,Onunload,Saving Data,我遇到了一个任务管理应用程序的问题,用户偶尔会关闭浏览器/选项卡,而他们键入的信息会消失,因为他们不小心关闭了浏览器/选项卡,导致他们输入的文本丢失(有些人可能会花半个小时输入文本) 因此,我必须提供一个解决方案,我有一些想法,但希望提供最好的解决方案,或者如果您有更好的解决方案,请让我听听您的意见 备选案文1: 在窗口.onunload或可能的窗口.onbeforeunload事件上,调用一个confirm()对话框,并首先测试任务日志记录区域中是否有任何文本且不是空的。如果不为空,请调用w

我遇到了一个任务管理应用程序的问题,用户偶尔会关闭浏览器/选项卡,而他们键入的信息会消失,因为他们不小心关闭了浏览器/选项卡,导致他们输入的文本丢失(有些人可能会花半个小时输入文本)

因此,我必须提供一个解决方案,我有一些想法,但希望提供最好的解决方案,或者如果您有更好的解决方案,请让我听听您的意见

备选案文1:

  • 窗口.onunload
    或可能的
    窗口.onbeforeunload
    事件上,调用一个confirm()对话框,并首先测试任务日志记录区域中是否有任何文本且不是空的。如果不为空,请调用
    window.confirm()
    ,询问用户是否希望在不保存日志的情况下关闭选项卡/窗口
我对选项#1的担心是它可能会干扰用户

备选案文2:

  • 在同一事件中,不要调用任何confirm(),而是将任务日志区域中的文本强制保存到cookie中。然后可能会提供一个按钮,尝试从同一页面上的cookie还原任何保存的任务信息,因此点击该按钮将使其解析cookie并检索信息
我将研究针对您正在使用的特定web服务器/语言的AJAX框架。AJAX允许您在键入表单数据时保存表单数据(例如,这就是Google Docs的工作方式)。

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

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

window.onbeforeunload = function(){
 return "[SOME CUSTOM MESSAGE FROM THE APP]";
}
一旦用户保存,并且我们知道不需要向他们显示消息,我们将设置:

window.onbeforeunload = null;

这有点侵入性,但总比用户意外丢失数据要好。

如果用户在提交他们正在做的事情之前愚蠢到导航离开,那么他们不应该介意侵入,询问他们是否打算做一些明显愚蠢的事情

另外,SO在导航时使用确认对话框,这里的大多数(部分)用户都非常聪明

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


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

什么是“用户入侵”意思?你知道提醒和确认窗口是多么令人讨厌,然而,这可能是该规则的唯一例外?我不知道。如果他们做得“正确”,就不会有对话,对吗?如果他们打字,忘了存钱,就丢了他们的工作,这很糟糕,对吧?问他们是否要保留或忽略未保存的更改有什么错?我知道如何做,但我觉得这会严重阻塞服务器-我的意思是。。为几十个用户绑定一个keyup事件,并为每个用户每隔几秒钟发送一个ajax请求?您不必在keyup上执行此操作,只需在blur上执行即可。这至少意味着用户已经完成了他们在该特定字段中所做的工作,并且值得保存。对..可能“按类型”太多了。如果您每60秒、每5分钟等在计时器上执行一次,如果且仅当文本已更改时,这也可能适用于您的场景。