HTML5
アプリからlocalStorageにアクセスする可能性のあるWebビューに問題があります。 test.htmlファイルは、ブラウザ(webview
)でローカルストレージがサポートされていないことを通知します。提案があれば..
package com.test.HelloWebView;
import Android.app.Activity;
import Android.content.Context;
import Android.os.Bundle;
import Android.util.Log;
import Android.view.KeyEvent;
import Android.webkit.WebChromeClient;
import Android.webkit.WebSettings;
import Android.webkit.WebStorage;
import Android.webkit.WebView;
import Android.webkit.WebViewClient;
public class HelloWebView extends Activity {
WebView webview;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
webview = (WebView) findViewById(R.id.webview);
webview.getSettings().setJavaScriptEnabled(true);
webview.setWebViewClient(new HelloWebViewClient());
webview.loadUrl("file:///Android_asset/test.html");
WebSettings settings = webview.getSettings();
settings.setJavaScriptEnabled(true);
settings.setDatabaseEnabled(true);
String databasePath = this.getApplicationContext().getDir("database", Context.MODE_PRIVATE).getPath();
settings.setDatabasePath(databasePath);
webview.setWebChromeClient(new WebChromeClient() {
public void onExceededDatabaseQuota(String url, String databaseIdentifier, long currentQuota, long estimatedSize, long totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater) {
quotaUpdater.updateQuota(5 * 1024 * 1024);
}
});
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) {
webview.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
private class HelloWebViewClient extends WebViewClient {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
}
以下が欠落していました。
settings.setDomStorageEnabled(true);
setDatabasePath() メソッドはAPIレベル19で廃止されました。次のようなストレージロケールを使用することをお勧めします。
webView.getSettings().setDomStorageEnabled(true);
webView.getSettings().setDatabaseEnabled(true);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KitKat) {
webView.getSettings().setDatabasePath("/data/data/" + webView.getContext().getPackageName() + "/databases/");
}
また、アプリケーションの再起動後にデータが失われるという問題もありました。これを追加すると助けました:
webView.getSettings().setDatabasePath("/data/data/" + webView.getContext().getPackageName() + "/databases/");
ビルドターゲットAndroid 4.4WでコンパイルされたAndroid 4.2.2で機能するソリューション:
WebSettings settings = webView.getSettings();
settings.setDomStorageEnabled(true);
settings.setDatabaseEnabled(true);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KitKat) {
File databasePath = getDatabasePath("yourDbName");
settings.setDatabasePath(databasePath.getPath());
}
アプリで複数のWebビューを使用している場合、依然として問題が発生します。localStorageはすべてのWebビューで正しく共有されていません。
複数のWebビューで同じデータを共有する場合、唯一の方法はJavaデータベースとjavascriptインターフェイスを使用してデータを修復することです。
このページ githubでこれを行う方法を示しています。
この助けを願っています!
複数のWebビューがある場合、localstorageは正しく機能しません。
2つの提案: