0

我正在开发一个 Chrome 应用程序(又名打包应用程序),其中大部分工作都发生在 textarea 元素中,我想确保自动保存用户的工作。

一种不切实际的方法是在每次击键和对文本区域进行其他更改时将工作保存在文件中,如下所示:

$('#text').on("keypress paste cut change", function () {
    // ... save to file
});

但是这样的开销太大了,所以我只是设置了一个脏标志,现在的问题是如果设置了脏标志,则在适当的时间进行保存。这些是我想出的一些合适的时间,所有这些都很容易实现:

  1. 每分钟,这是 chrome.alarms.onAlarm 允许的最小间隔。

  2. 当用户使用 File 菜单上的 Quit 项退出应用程序时。

  3. 当用户明确选择文件菜单上的保存项目时。(这可能会在最终版本中消失,但在开发过程中非常方便。)

问题是当用户关闭应用程序或整个浏览器时没有可用的事件。这些事件确实存在于 JavaScript 中,但它们在 Chrome 应用程序中被明确禁止。据我了解,其理由是 Chrome 开发人员不想提供这种拐杖,而是希望鼓励应用程序开发人员实施能够持续节省工作的应用程序。美好的!我完全赞成。

任何想法如何在 Chrome 应用程序中实现自动保存?

更新:我刚刚看了一下 Gliffy Diagrams,它可能是迄今为止最雄心勃勃的 Chrome 应用程序,当它通过应用程序窗口或 Dock 关闭时,它不会进行任何保存。仅当从其文件菜单中选择关闭或保存时才会这样做。这基本上就是我的应用程序所做的。

4

1 回答 1

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 更好。

于 2013-10-02T18:11:29.300 回答