【问题标题】:Android WebView doesn't display siteAndroid WebView 不显示网站
【发布时间】:2016-12-19 08:22:53
【问题描述】:

我需要在 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");

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

更新: 我的 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>

【问题讨论】:

  • 检查 url 它不工作........
  • @sushildlh 它的示例网址
  • 添加互联网权限
  • 如果所有其他网站都运行良好,那么肯定是您的网址有问题吗?
  • @vinoth12594 在清单中我有&lt;uses-permission android:name="android.permission.INTERNET"/&gt;

标签: android webview android-webview


【解决方案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

【讨论】:

  • 谢谢,我加了@Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { handler.proceed(); // Ignore SSL certificate errors },但我还是有同样的问题。我添加@Override public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error){ Toast.makeText(SignUpActivity.this, "Your Internet Connection May not be active Or " + error , Toast.LENGTH_LONG).show(); } 来检查我的错误,但我没有错误
【解决方案2】:

如果 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 可以对其执行操作。

【讨论】:

    【解决方案3】:

    主要是因为不安全的连接或 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
       ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-24
      • 1970-01-01
      • 2020-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多