2

ondelete イベント ハンドラのようなものはありますか、または indexedDB データベースをクリアする前にユーザーに警告する方法はありますか。

背景: オフライン時に indexedDB にほとんどのデータを保存することで機能する、オフラインの最初のアプリがあります。現在、ユーザーがオンラインになると、データをサーバーに同期しようとしますが、誰かが誤ってブラウザーをリセットしたり、indexedDB をクリアしたりすると、サーバーに同期する必要がある重要なデータがあるため、災害が発生する可能性があります。

それで、この問題を克服する方法はありますか?indexedDB を永続的なファイル システムとして保存する方法、削除を無効にする方法、またはイベントを発生させて削除時に適切に処理する方法はありますか?

4

1 に答える 1

4

いいえ。私たちの何人かがそれをどのように使用しているかにかかわらず、IndexedDB データベースのデータがそこに残るという保証はありません。これは仕様によるもので、「一時的な」ストレージです。ブラウザは、必要に応じてスペースを解放できます。最終的にIndexedDB データを「永続的な」データとして保存できるようになると、状況はいくらか改善されますが、データが削除されないことを保証する方法はありません。私見では、ユーザーは自分のコンピューター上のデータを削除できる必要があり、そうでない場合は重大な問題になります。

そして、問題はあなたが思っているよりもさらに悪いかもしれません。たとえば、これは Chrome のバグです(他のブラウザにもあるかもしれません)。ユーザーが「過去 24 時間の Cookie とサイト データを削除する」と言った場合、Chrome は過去 24 時間に変更された IndexedDB データベースを完全に削除します。したがって、DB に 1 年前に作成されたが変更されていない 5000 個のオブジェクトがあり、今日編集されたオブジェクトがある場合、それらはすべて削除されます。これはユーザーを混乱させる可能性がありますが、私の知る限り、誰も良い解決策を提案していません。

唯一の回避策はサーバーと同期することですが、これは明らかに 100% 信頼できるわけではありません。したがって、非常に重要なデータがある場合は、キャッシュとして使用する場合を除いて、おそらく Web サイトの IndexedDB データベースに置くべきではありません。

于 2014-10-04T04:12:37.260 に答える