Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript chrome应用程序中的自动保存(打包应用程序)_Javascript_Google Chrome - Fatal编程技术网

Javascript chrome应用程序中的自动保存(打包应用程序)

Javascript chrome应用程序中的自动保存(打包应用程序),javascript,google-chrome,Javascript,Google Chrome,我正在开发一个Chrome应用程序(也称为打包应用程序),其中大部分工作发生在textarea元素中,我希望确保用户的工作自动保存 一种不切实际的方法是在每次击键和对textarea进行其他更改时将工作保存在一个文件中,如下所示: $('#text').on("keypress paste cut change", function () { // ... save to file }); 但是这会带来太多的开销,所以我只是设置了一个脏标志,现在的问题是,如果设置了脏标志,那么在适当的

我正在开发一个Chrome应用程序(也称为打包应用程序),其中大部分工作发生在textarea元素中,我希望确保用户的工作自动保存

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

$('#text').on("keypress paste cut change", function () {
    // ... save to file
});
但是这会带来太多的开销,所以我只是设置了一个脏标志,现在的问题是,如果设置了脏标志,那么在适当的时候进行保存。我想出了一些合适的时机,所有这些都很容易实现:

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

  • 当用户使用“文件”菜单上的“退出”项退出应用程序时

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

  • 问题是,当用户关闭应用程序或整个浏览器时,没有可用的事件。这些事件确实存在于JavaScript中,但在Chrome应用程序中特别禁止。据我所知,其理由是Chrome开发者不想提供这种拐杖,而是想鼓励应用开发者实现能够持续节省工作的应用。好的我完全赞成

    如何在Chrome应用程序中实现自动保存


    更新:我只是看了一下Gliffy图表,这可能是迄今为止最雄心勃勃的Chrome应用程序,当它通过应用程序窗口或dock关闭时,它不会进行任何保存。仅当从文件菜单中选择“关闭”或“保存”时,才会执行此操作。这就是我的应用程序的基本功能。

    您可以在当前设置脏标志的函数中使用普通JavaScript计时器(例如,5秒)。每次按键时重置计时器,使autosave在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要好。

    您是否可以在当前设置脏标志的函数中使用非活动超时(例如,5秒)?也就是说,每次按键时,重置一个计时器:
    clearTimeout(inactiveTimer);inactiveTimer=setTimeout(saveText,5000)
    。因此,您仅在用户5秒钟内未执行任何操作时保存,而不是在每次按键后保存。显然,这无法处理用户在完成输入后4秒关闭应用程序的情况,但这比您的选项要好#1.听起来很有希望。。。如果Chrome应用程序的分辨率比闹钟的分辨率高,我会研究一下这个计时器。试过这个,效果很好。在实施警报时,我完全忘记了计时器!(请参考答案中的注释,以便我标记。)