Android WebView不显示网站

时间:2016-08-12 10:38:40

标签: android webview android-webview

我需要在WebView中显示一个网站。我经历了几乎所有可能的解决方案,但我的WebView没有正确显示网站。以下是我的代码:

progDailog = ProgressDialog.show(this, "Loading","Please wait...", true);
        progDailog.setCancelable(false);

        webView.getSettings().setJavaScriptEnabled(true);
        webView.setWebViewClient(new WebViewClient(){

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                progDailog.show();
                view.loadUrl(url);

                return true;
            }
            @Override
            public void onPageFinished(WebView view, final String url) {
                progDailog.dismiss();
            }
        });

        webView.loadUrl("https://www.site.ru/login");

如果我在移动浏览器中复制网址“https://www.site.ru/login”,那么当我尝试在WebView中加载相同的网址时,它会在Android应用中正确显示,但是它会显示progressBar,然后WebView屏幕中的所有内容都显示为白色和空白

UPD: 我的xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <WebView
        android:id="@+id/sign_up_web_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></WebView>


</RelativeLayout>

3 个答案:

答案 0 :(得分:1)

首先,创建一个扩展WebViewClient的类,并将其设置为忽略SSL错误:

// SSL Error Tolerant Web View Client
private class SSLWebViewClient extends WebViewClient {

            @Override
            public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
                handler.proceed(); // Ignore SSL certificate errors
            }

}

然后使用您的Web视图对象,将其Web视图客户端设置为覆盖类的实例:

 webView.setWebViewClient(
                new SSLWebViewClient();
        );

检查此thread

答案 1 :(得分:0)

如果 Logcat 显示类似于以下内容的错误:

I/chromium: [INFO:CONSOLE(1)] "TypeError: Cannot read property 'getItem' of null"
I/chromium: [INFO:CONSOLE(9)] "Uncaught TypeError: Cannot read property 'getItem'

通过添加以下内容启用 Dom 存储:

webView.settings.setDomStorageEnabled(true);

这似乎允许浏览器存储页面元素的 DOM 模型,以便 Javascript 可以对其进行操作。

答案 2 :(得分:0)

主要是因为不安全的连接或 SSL 错误,所以您需要实现一个扩展 SSLWebViewClient 类并覆盖 onReceivedSslError 方法并忽略 ssl 错误的类:

class SSLWebViewClient : WebViewClient() {

    override fun onReceivedSslError(view: WebView?, handler: SslErrorHandler?, error: SslError?) {
        handler?.proceed()
    }
}

然后:

onCreate

onCreate() {
    ...
    webView = findViewById(R.id.webView)
    webView.webViewClient = SSLWebViewClient()
    webView.settings.javaScriptEnabled = true
    webView.settings.domStorageEnabled = true
    webView.settings.builtInZoomControls = true
   ...
}