5

Chromeで試してみたので、Webアプリのappcacheがうまく機能することはわかっています.Chrome for Androidでも機能しますが、WebビューからAndroidアプリにロードすると機能しません。次の設定があります。

    myWebView = (WebView) v.findViewById(R.id.webView);
    WebSettings webSettings = myWebView.getSettings();
    webSettings.setDomStorageEnabled(true);
    webSettings.setJavaScriptEnabled(true);
    webSettings.setSupportMultipleWindows(true);
    webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
    webSettings.setAppCacheMaxSize(1024*1024*16);
    String appCachePath = getActivity().getApplicationContext().getCacheDir().getAbsolutePath();
    webSettings.setAppCachePath(appCachePath);
    webSettings.setAllowFileAccess(true);
    webSettings.setAppCacheEnabled(true);
    webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);
    webSettings.setDatabaseEnabled(true);
    String databasePath = "/data/data/" + getActivity().getPackageName() + "/databases/";
    webSettings.setDatabasePath(databasePath);
    webSettings.setGeolocationEnabled(true);
    webSettings.setSaveFormData(true);

しかし、アプリをロードするとき、logcat で次のように読むことができます

10-15 01:21:43.815: E/SQLiteLog(14278): (1) そのようなテーブルはありません: CacheGroups 10-15 01:21:43.815: D/WebKit(14278): エラー: 10-15 01:21:43.815 : D/WebKit(14278): アプリケーション キャッシュ ストレージ: ステートメント「DELETE FROM CacheGroups」エラー「そのようなテーブルはありません: CacheGroups」の実行に失敗しました 10-15 01:21:43.815: D/WebKit(14278): 外部/webkit/ソース/WebCore/loader/appcache/ApplicationCacheStorage.cpp(558): bool WebCore::ApplicationCacheStorage::executeSQLCommand(const WTF::String&) 10-15 01:21:43.815: E/SQLiteLog(14278): (1) そのようなものはありませんテーブル: キャッシュ 10-15 01:21:43.815: D/WebKit(14278): エラー: 10-15 01:21:43.815: D/WebKit(14278): アプリケーション キャッシュ ストレージ: ステートメント「DELETE FROM Caches」の実行に失敗しましたエラー "そのようなテーブルはありません: キャッシュ" 10-15 01:21:43.815: D/WebKit(14278):外部/webkit/Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp(558): bool WebCore::ApplicationCacheStorage::executeSQLCommand(const WTF::String&) 10-15 01:21:43.815: E/SQLiteLog(14278): (1) no such table: Origins 10-15 01:21:43.815: D/WebKit(14278): ERROR: 10-15 01:21:43.815: D/WebKit(14278): Application Cache Storage: failed to execute statement "DELETE FROM Origins" エラー "no such table: Origins" 10-15 01:21:43.815: D/WebKit(14278): external/webkit/Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp(558): bool WebCore ::ApplicationCacheStorage::executeSQLCommand(const WTF::String&) 10-15 01:21:43.815: E/SQLiteLog(14278): (1) そのようなテーブルはありません: DeletedCacheResources21:43.815: E/SQLiteLog(14278): (1) そのようなテーブルはありません: Origins 10-15 01:21:43.815: D/WebKit(14278): エラー: 10-15 01:21:43.815: D/WebKit( 14278): アプリケーション キャッシュ ストレージ: ステートメント「DELETE FROM Origins」エラー「そのようなテーブルはありません: Origins」の実行に失敗しました 10-15 01:21:43.815: D/WebKit(14278): 外部/webkit/Source/WebCore/loader/ appcache/ApplicationCacheStorage.cpp(558): bool WebCore::ApplicationCacheStorage::executeSQLCommand(const WTF::String&) 10-15 01:21:43.815: E/SQLiteLog(14278): (1) そのようなテーブルはありません: DeletedCacheResources21:43.815: E/SQLiteLog(14278): (1) そのようなテーブルはありません: Origins 10-15 01:21:43.815: D/WebKit(14278): エラー: 10-15 01:21:43.815: D/WebKit( 14278): アプリケーション キャッシュ ストレージ: ステートメント「DELETE FROM Origins」エラー「そのようなテーブルはありません: Origins」の実行に失敗しました 10-15 01:21:43.815: D/WebKit(14278): 外部/webkit/Source/WebCore/loader/ appcache/ApplicationCacheStorage.cpp(558): bool WebCore::ApplicationCacheStorage::executeSQLCommand(const WTF::String&) 10-15 01:21:43.815: E/SQLiteLog(14278): (1) そのようなテーブルはありません: DeletedCacheResourcesD/WebKit(14278): 外部/webkit/Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp(558): bool WebCore::ApplicationCacheStorage::executeSQLCommand(const WTF::String&) 10-15 01:21:43.815: E/SQLiteLog(14278): (1) そのようなテーブルはありません: DeletedCacheResourcesD/WebKit(14278): 外部/webkit/Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp(558): bool WebCore::ApplicationCacheStorage::executeSQLCommand(const WTF::String&) 10-15 01:21:43.815: E/SQLiteLog(14278): (1) そのようなテーブルはありません: DeletedCacheResources

そして明らかにAppCacheが機能していません=/私は何か間違ったことをしていますか? ありがとう!

4

2 に答える 2

0

appcache と domstore の前に db を設定し、set*Enabled() の前に set*Path()/set*Size() のような「パラメータ」を設定します。

それに加えて、使用時に2つの独立して管理されたキャッシュを互いにスタックするのは得策ではないかもしれません

getActivity().getApplicationContext().getCacheDir().getAbsolutePath()

WebView のキャッシュ マネージャーがデータを保存するディレクトリとして

アクティビティのキャッシュ マネージャーが、webview のキャッシュ マネージャーが作成したファイルを削除することを決定した場合、webview のキャッシュ マネージャーは通知されず、その存在にさらに依存する可能性があります。

長い間機能するかもしれませんが、いつの日か識別が困難な交互のバグになる可能性があります

于 2013-03-10T03:52:48.580 に答える
0

これらは私のために働く設定です:

CookieSyncManager.createInstance(contextForDialog);
webView = (WebView) findViewById(R.id.webView1);

WebSettings settings = webView.getSettings();

settings.setRenderPriority(RenderPriority.HIGH);
settings.setCacheMode(WebSettings.LOAD_DEFAULT);

settings.setSaveFormData(true);
settings.setLoadsImagesAutomatically(true);
settings.setJavaScriptEnabled(true);
settings.setDatabaseEnabled(true);
settings.setDomStorageEnabled(true);
settings.setAppCacheMaxSize(1024*1024*1024*8);
String sDataPath = context.getDir("database", Context.MODE_PRIVATE).getPath();
settings.setDatabasePath(sDataPath);
settings.setAppCachePath(sDataPath);
settings.setAllowFileAccess(true);
settings.setAppCacheEnabled(true);
settings.setAllowFileAccess(true);
settings.setGeolocationEnabled(true);
settings.setSavePassword(true);

webView.setFocusable(true);
webView.setFocusableInTouchMode(true);
settings.setDatabaseEnabled(true);
settings.setAllowContentAccess(true);
settings.setLoadsImagesAutomatically(true);
webView.addJavascriptInterface(this, "AndroidInterface");
WebView.setWebViewClient(new routeNavClient());
webView.setWebChromeClient(new webChromeClient());
CookieManager c = CookieManager.getInstance();
c.setAcceptCookie(true);
于 2013-11-12T19:36:46.837 に答える