2013-10-02 84 views
0

我正在開發Chrome應用程序(也稱爲打包應用程序),其中大部分工作都發生在textarea元素中,我想確保用戶的工作自動保存。在Chrome應用程序中自動保存(打包的應用程序)

一種不切實際的做法是保存工作中的每一個按鍵和其他改變textarea的文件,像這樣的東西:

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

但是,這是太多的開銷,所以不是我只設置一個髒標誌,現在的問題是如果設置了髒標誌,則在適當的時候進行保存。這些都是一些適當的時候,我拿出,所有這些都是很容易實現:

  1. 每一分鐘,這是最小間隔chrome.alarms.onAlarm將允許。

  2. 當用戶使用文件菜單上的退出項目退出應用程序時。

  3. 當用戶在文件菜單上明確選擇保存項目時。 (這可能走在最後的版本,但它的發展過程中是非常方便的。)

的問題是,有沒有可用的情況下,當用戶關閉應用程序或整個瀏覽器。這些事件確實存在於JavaScript中,但它們在Chrome應用程序中被明確禁止。據我瞭解,理由是Chrome開發人員不希望提供這種柺杖,而是希望鼓勵應用程序開發人員實施可持續節省工作的應用程序。精細!我爲此而努力。

如何在Chrome應用中實施自動保存的任何想法?

更新:我剛剛看了一下Gliffy圖,也許是最雄心勃勃的Chrome應用,到目前爲止,當它通過應用程序窗口或從塢關閉它不會做任何儲蓄。它只在從文件菜單中選擇關閉或保存時纔會執行。這基本上就是我的應用程序所做的。

+0

您可以在當前正在設置髒標誌的功能中使用不活動超時(例如5秒)嗎?也就是說,在每次按鍵時,重置一個定時器:'clearTimeout(inactiveTimer); inactiveTimer = setTimeout(saveText,5000)'。因此,只有用戶在5秒鐘內沒有做任何事情時才能保存,而不是在每次按鍵之後保存。顯然,這並不能處理用戶在完成輸入後4秒關閉應用程序的情況,但它比您的選項#1更好。 – apsillers

+0

聽起來很有希望......我會研究一下這個計時器,如果它的Chrome Apps的分辨率比報警更精細的話。 –

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

相關問題