Webview没有正确加载localStorage变量

时间:2016-10-31 12:42:59

标签: javascript java android html5 webview

我制作了一个在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);
}
}

2016年10月10日更新

这个解决方案解决了我的问题:

if(Build.VERSION.SDK_INT >= 16) {
   setting.setAllowUniversalAccessFromFileURLs(true);
}

我在这里找到了它:Android 4.0 -> 4.3 (included) - Web storage lost between webview pages

0 个答案:

没有答案