Webview localStorage.setItem(javascript)不能在加载url(android)之前设

Webview localStorage.setItem(javascript) cant set before load url(android)

本文关键字:android url 加载 不能 localStorage setItem javascript Webview      更新时间:2023-09-26

在加载URL之前,我需要设置localStorage.setItem

然而,当我第一次加载URL时,什么也没有出现。如果我第二次刷新页面,它就会出现。如何在第一次加载页面时设置localStorage.setItem ?

webView.getSettings().setDomStorageEnabled(true);
        webView.getSettings().setJavaScriptEnabled(true);
        //set token and role
        webView.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                webView.loadUrl(
                        "javascript:" +
                                "localStorage.setItem('token', '" + token + "');");
            }
        });

        webView.setWebChromeClient(new WebChromeClient() {
            private ProgressDialog mProgress;
            @Override
            public void onProgressChanged(WebView view, int progress) {
                try {
                    if (mProgress == null) {
                        mProgress = new ProgressDialog(getActivity());
                        if (!getActivity().isFinishing()) {
                            mProgress.show();
                        }
                    }
                    mProgress.setMessage(getString(R.string.loading) + String.valueOf(progress) + "%");
                    if (progress == 100) {
                        mProgress.dismiss();
                        mProgress = null;
                    }
                } catch (Exception e) {
                    Log.e("item menu", e.toString());
                }
            }
        });

        webView.loadUrl(url);

正如您所说,本地存储数据第一次没有出现…我也遇到过同样的问题....这就是解决方案。放置本地存储。settitem (key, val)在onPageStarted()和onPageFinished()方法中。

公共类AppWebViewClients扩展WebViewClient {private ProgressBar;

    public AppWebViewClients(ProgressBar progressBar) {
        this.progressBar=progressBar;
        progressBar.setVisibility(View.VISIBLE);
    }
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        // TODO Auto-generated method stub
        view.loadUrl(url);
        return true;
    }
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        super.onPageStarted(view, url, favicon);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            webview.evaluateJavascript("window.localStorage.setItem('"+ key1 +"','"+ val1 +"');", null);
            webview.evaluateJavascript("window.localStorage.setItem('"+ key2 +"','"+ val2 +"');", null);
        } else {
            webview.loadUrl("javascript:localStorage.setItem('"+ key1 +"','"+ val1 +"');");
            webview.loadUrl("javascript:localStorage.setItem('"+ key2 +"','"+ val2 +"');");
            }
        }
    }
    @Override
    public void onPageFinished(WebView view, String url) {
        // TODO Auto-generated method stub
        super.onPageFinished(view, url);
        progressBar.setVisibility(View.GONE);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            webview.evaluateJavascript("window.localStorage.setItem('"+ key1 +"','"+ val1 +"');", null);
            webview.evaluateJavascript("window.localStorage.setItem('"+ key2 +"','"+ val2 +"');", null);
        } else {
            webview.loadUrl("javascript:localStorage.setItem('"+ key1 +"','"+ val1 +"');");
            webview.loadUrl("javascript:localStorage.setItem('"+ key2 +"','"+ val2 +"');");
            }
        }
    }
}

希望它能解决你的问题。谢谢你