如何在关闭期间保存页面状态
当用户关闭浏览器窗口而不先保存他们的工作时,将Web应用程序的数据与服务器进行同步的可接受方式是什么? 我正在通过点击“X”或甚至按F5或某物来通话。
一点背景:
有问题的webapp有一个主窗口,然后是从主窗口产生的子窗口,使得在子窗口中完成沙箱“工作”。 我无法控制这方面的实施。
用例:
在用户决定单击“确定”将数据保存在服务器上之前,每个子窗口都可以输入相当大量的信息。
我已经考虑/尝试过的事情:
onbeforeunload
事件处理程序返回一个字符串来简单确认。 (问题:我的团队负责人不愿让浏览器特定的“ alert
对话框”进入Web应用程序。据他介绍:用户体验依赖于丑陋的对话框而退出窗口。) onpageunload
事件期间触发AJAX请求。 (问题:由于XHR回调从未被调用,我发现一些浏览器将连接断开,然后随机尝试触发将来打开的窗口的回调。) onpageunload
事件期间触发同步AJAX请求。 (问题:忽略这样一个事实,即包括我自己在内的人们往往会讨厌这样做,以及它已被弃用并将在未来被删除的事实...... UI可能会长时间等待AJAX请求完成,如果他们失去互联网,可能无限期地)。 onchange
/ onblur
/ onwhateverelse
事件处理程序。 (问题:与上面和下面更“懒惰”的实现相比,大量的编码开销)。 localStorage
将更改的字段保留在客户端计算机上,直到他们将其工作实际提交给服务器。 (问题:浏览器支持......这需要支持XHR这样多的地方,客户端存储是否有广泛的支持?如果我没有弄错,我认为有一点差距。) 预先感谢您的意见。
我提出的解决方案基本上是上述选择4的修改版本。
我开发了一些逻辑,它在页面加载时注册onchange/onkeypress
事件处理程序,并使用特定属性标识的节点(在本例中为data-save-state="true"
)。
要利用这一点,从主窗口启动的每个“子窗口”的开发人员的唯一要求是使用我的新JavaScript Saver
模块注册他们希望保存其数据的URI。
标识的元素的值将被序列化并作为JSON对象发送到Saver
。 一旦在1000毫秒内没有检测到进一步的变化, Saver
器负责排队请求集并将它们作为一组发送到服务器。
对于那些不得不开发这种能力的人来说,这是更多的开销,但现在它已经存在,其他团队成员很容易将其集成到他们的代码中。
至于数据丢失的可能性,现在唯一的风险是在将保存请求发送到服务器之前的第二时间。 这个解决方案看起来非常“Google Docs” - 就像我在本质上一样。
听起来像你想使用cookies。 据我所知,几乎所有的网络浏览器都支持它。
唯一不支持localStorage
是Opera Mini ..我想这对你或者你正在制作程序的人来说有点太不支持了。
这里有一个用于处理cookie的插件,因为它们确实不是你想要处理的插件。 ;)看起来它支持任何浏览器!
如果您不想使用库,请参阅Document.cookie
上的Mozilla开发者网络页面。
如果你想了解一下cookies的历史,你可以看看这个。
链接地址: http://www.djcxy.com/p/26715.html