我正在开发一个Chrome应用程序(打包应用程序),其中大部分工作都发生在textarea元素中,我想确保自动保存用户的工作。
一种不切实际的方法是在每次击键时将工作保存在文件中,并将其他更改保存到textarea中,如下所示:
$('#text').on("keypress paste cut change", function () {
// ... save to file
});
但是开销太多了,所以我只是设置了一个脏标志,现在问题是如果设置了脏标志,在适当的时候实现保存。这些是我提出的适当时期,所有这些都很容易实现:
每分钟,这是chrome.alarms.onAlarm允许的最小间隔。
当用户使用“文件”菜单上的“退出”项退出应用程序时。
当用户明确选择“文件”菜单上的“保存”项时。 (这可能会在最终版本中消失,但在开发过程中非常方便。)
问题是当用户关闭应用程序或整个浏览器时没有可用的事件。这些事件确实存在于JavaScript中,但Chrome Apps中明确禁止这些事件。据我所知,理由是Chrome开发人员不想提供这个问题,而是希望鼓励应用程序开发人员实施能够持续保存工作的应用程序。精细!我全力以赴。
如何在Chrome应用中实施自动保存?
更新:我刚刚看了一下Gliffy Diagrams,这可能是迄今为止最雄心勃勃的Chrome应用程序,当它通过应用程序窗口或从应用程序窗口关闭时它不会进行任何保存码头。只有在从文件菜单中选择“关闭”或“保存”时才会执行此操作。这基本上就是我的应用程序所做的。
答案 0 :(得分:1)
您可以在当前设置脏标志的函数中使用普通的JavaScript计时器(例如,5秒)。使用每次按键重置计时器,以便自动保存在5秒钟不活动后启动:
var inactiveTimer;
$('#text').on("keypress paste cut change", function () {
clearTimeout(inactiveTimer);
// save after 5 seconds, unless another keypress resets this timer
inactiveTimer = setTimeout(saveText, 5000);
}
因此,您只能在用户5秒内没有做任何事情时保存,而不是在每次击键后保存。显然,这并不能解决用户在完成打字后4秒钟关闭应用程序的情况,但它比您的选项#1更好。