如何在关闭期间保存页面状态

当用户关闭浏览器窗口而不先保存他们的工作时,将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

    上一篇: How to save page state during close

    下一篇: Pass char* to method expecting unsigned char*