我制作了一个在webview中运行的Android应用程序。在我的手机(Android 6.0)工作正常,但在Android 4.1.2(棒棒糖)的手机有一些问题。
例如,index.html页面上有一个按钮。如果用户按下此按钮,则会将其重定向到另一个html页面。在这个页面上,用户可以做一些事情(并不重要),然后应用程序会向他们显示一个按钮。如果他们按下此按钮,该应用程序允许他们返回index.html。在返回索引页面之前,webview会在localStorage变量中保存一些内容,但index.html会使用之前的值读取它们,并且操作不会正确发生。
只有当用户关闭应用程序然后重新打开它时,它才能读取localStorage中的新值。
有人可以帮我解决这个问题吗?
查看我的java代码:
public class MainActivity extends AppCompatActivity {
private WebView myWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_main);
myWebView = (WebView) this.findViewById(R.id.webView);
myWebView.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
//Required functionality here
return super.onJsAlert(view, url, message, result);
}
});
myWebView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url){
if (url.contains("http") || url.contains("https")) { // Could be cleverer and use a regex
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
}
return false;
// view.loadUrl(url);
// return true;
}
});
WebSettings settings = myWebView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setDomStorageEnabled(true);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
settings.setDatabasePath("/data/data/" + myWebView.getContext().getPackageName() + "/databases/");
}
myWebView.setVerticalScrollBarEnabled(false);
myWebView.setHorizontalScrollBarEnabled(false);
myWebView.loadUrl("file:///android_asset/www/index.html");
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
String x = myWebView.getUrl();
//x = x.replace("file:///android_asset/www/","");
boolean ch_url = x.contains("index.html");
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
if (myWebView.canGoBack()) {
if(ch_url == true){
finish();
}else {
myWebView.goBack();
}
} else {
finish();
}
return true;
}
}
return super.onKeyDown(keyCode, event);
}
}
这个解决方案解决了我的问题:
if(Build.VERSION.SDK_INT >= 16) {
setting.setAllowUniversalAccessFromFileURLs(true);
}
我在这里找到了它:Android 4.0 -> 4.3 (included) - Web storage lost between webview pages