0

ほとんどの作業が textarea 要素で行われる Chrome アプリ (パッケージ化されたアプリ) を開発しています。ユーザーの作業が自動的に保存されるようにしたいと考えています。

非現実的なアプローチの 1 つは、次のような方法で、キーストロークやテキストエリアへのその他の変更ごとに作業をファイルに保存することです。

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

しかし、それではオーバーヘッドが大きすぎるので、代わりにダーティ フラグを設定するだけにしました。問題は、ダーティ フラグが設定されている場合に適切なタイミングで保存を有効にすることです。これらは私が思いついたいくつかの適切な時間であり、すべて簡単に実装できます。

  1. 毎分。これは、chrome.alarms.onAlarm が許可する最小の間隔です。

  2. ユーザーが [ファイル] メニューの [終了] 項目でアプリを終了したとき。

  3. ユーザーが [ファイル] メニューの [保存] 項目を明示的に選択した場合。(これは最終バージョンではなくなるかもしれませんが、開発中は非常に便利です。)

問題は、ユーザーがアプリまたはブラウザー全体を閉じたときに使用できるイベントがないことです。これらのイベントは JavaScript に存在しますが、Chrome アプリでは明確に禁止されています。私が理解している理論的根拠は、Chrome 開発者がこの松葉杖を提供したくないということです。代わりに、アプリ開発者に、継続的に作業を節約するアプリを実装するよう奨励したいと考えています。罰金!私はそれですべてです。

Chrome アプリで自動保存を実装する方法はありますか?

更新: おそらくこれまでの Chrome アプリの中で最も野心的な Gliffy Diagrams を見てみましたが、アプリ ウィンドウまたはドックから閉じると保存されません。ファイル メニューから [閉じる] または [保存] が選択された場合にのみ実行されます。それが基本的に私のアプリが行うことです。

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 に答える