WebSQLデータベースまたはローカルストレージデータを削除せずに、オフラインモード(cache.manifestで定義)ファイルを削除しようとしています。
私はキャッシュファイルの削除を実験しており、stackoverflowやその他の場所で関連する回答を使用して、次のアプローチからの回答を使用してWebViewキャッシュを削除しました。
Android Webview- FWIW
内のファイルを手動で削除することを示すキャッシュを完全にクリアしますContext.getCacheDir();
。より単純なアプローチ(受け入れられない回答が記載されています)を使用した場合と同じ結果に気づきましたWebView.clearCache(true);
。このアプローチでは、cache.manifestに含まれていないキャッシュファイルが削除されます。
私はまた、使用について言及している他の複数の場所で説明されている手法を使用しました
deleteDatabase("webview.db");
deleteDatabase("webviewCache.db");
オフラインモードのファイルには影響しません。私は確かにwebview.dbを削除しましたが、不思議なことに、を使用してwebviewCache.dbファイルを見たことがありませんContext.databaseList()
。
(余談ですが、webview.dbを削除し、次にアプリを開いたときに入力フィールドにテキストを貼り付けようとした後にクラッシュに気付いたので、webview.dbを削除することに疑問があります。防御が必要なようです。少なくとも一部のアプリでは、そのトリックを中心にプログラミングする
android.database.sqlite.SQLiteException: no such table: formurl: , while compiling: SELECT _id FROM formurl WHERE (url == ?)
at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:64)
at android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java:146)
at android.database.sqlite.SQLiteProgram.compileAndbindAllArgs(SQLiteProgram.java:367)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:130)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:94)
at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:46)
at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:47)
at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1539)
at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1419)
at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1375)
at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1455)
at android.webkit.WebViewDatabase.getFormData(WebViewDatabase.java:1150)
at android.webkit.WebView$RequestFormData.run(WebView.java:4493)
at java.lang.Thread.run(Thread.java:1020)
)。
また、アプリケーション設定ページの[キャッシュのクリア]ボタンを使用しましたが、オフラインモードのファイルには影響しません。アプリケーション設定ページの[データの消去]ボタンは、オフラインモードのファイルだけでなく、WebSQLデータベースやローカルストレージキーを含む他のすべてのファイルも削除します。また、「データのクリア」ボタンをプログラムで模倣する方法もわかりません。これは、私が探している答えではありませんが、これも役立ちます。
繰り返しになりますが、要点は、これらのアプローチのどれも一見十分ではないということです。私がやりたいのは、オフラインモードでキャッシュされたJS / HTML / CSSを削除し、AndroidWebViewを介して作成されたすべてのWebSQLdbファイルとローカルストレージキーを保持することです。
私は自分のWebサーバーのログを監視しているので、アプリがファイルを要求しているかどうかを正確に知ることができます。