Mam problem z widokiem internetowym, który może uzyskać dostęp do localStorage przez HTML5
aplikację. Plik test.html informuje mnie, że pamięć lokalna nie jest obsługiwana przez moją przeglądarkę (tj. webview
). Jeśli masz jakieś sugestie ...
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;
}
}
}
android
html
webview
local-storage
Tomasz
źródło
źródło
Metoda setDatabasePath () została uznana za przestarzałą w interfejsie API na poziomie 19. Radzę używać ustawień narodowych pamięci masowej w następujący sposób:
źródło
Miałem również problem z utratą danych po ponownym uruchomieniu aplikacji. Dodanie tego pomogło:
źródło
Rozwiązanie, które działa na moim Androidzie 4.2.2, skompilowane z docelową wersją Androida 4.4W:
źródło
Jeśli Twoja aplikacja korzysta z wielu widoków internetowych, nadal będziesz mieć problemy: localStorage nie jest poprawnie udostępniany we wszystkich widokach internetowych.
Jeśli chcesz udostępniać te same dane w wielu widokach internetowych, jedynym sposobem jest ich naprawa za pomocą bazy danych Java i interfejsu javascript.
Ta strona na github pokazuje, jak to zrobić.
Mam nadzieję, że to pomoże!
źródło
jeśli masz wiele widoków, przechowywanie lokalne nie działa poprawnie.
dwie sugestie:
źródło