Android WebView无法显示网站

5

我需要在一个 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时,它会显示进度条,然后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>

@sushildlh 这是一个示例网址。 - g71132
添加网络权限。 - Vinothkumar Nataraj
如果所有其他网站都正常工作,那么问题肯定是出在你的URL上了,对吧? - Sunil Sunny
在清单文件中,我有 <uses-permission android:name="android.permission.INTERNET"/> - g71132
@sushildlh 是的,我的链接是正确的。因为我是从桌面浏览器复制的,然后在手机浏览器中检查了这个链接。只有在 WebView 中它不起作用。 - g71132
显示剩余4条评论
3个回答

2
首先,创建一个继承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();
        );

请查看此线程


谢谢,我添加了@Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { handler.proceed(); // 忽略SSL证书错误 }但是问题仍然存在。而且我添加了@Override public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error){ Toast.makeText(SignUpActivity.this, "您的网络连接可能未激活或出现以下错误:" + error , Toast.LENGTH_LONG).show(); }来检查我的错误,但是没有错误 - g71132

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


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
   ...
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接