[android] 안드로이드 웹뷰 및 localStorage
HTML5
앱 에서 localStorage에 액세스 할 수있는 웹보기에 문제가 있습니다. 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());
}
답변
앱에서 여러 개의 웹뷰를 사용하는 경우 여전히 문제가 있습니다. localStorage는 모든 웹뷰에서 올바르게 공유되지 않습니다.
여러 웹보기에서 동일한 데이터를 공유하려는 경우 유일한 방법은 Java 데이터베이스 및 Javascript 인터페이스로 복구하는 것입니다.
github 의이 페이지 는이를 수행하는 방법을 보여줍니다.
이 도움을 바랍니다!
답변
웹뷰가 여러 개인 경우 로컬 저장소가 올바르게 작동하지 않습니다.
두 가지 제안 :
- “@Guillaume Gendre”가 설명하는 웹 데이터베이스 로컬 저장소 대신 Java 데이터베이스를 사용하십시오. (물론 작동하지 않습니다)
- 로컬 스토리지는 json과 같이 작동하므로 값은 “key : value”로 저장됩니다. 키에 브라우저 고유 ID를 추가하고 일반 Android localstorage를 사용하면