安卓中的Webview无法加载https网址?

16

我正在Android中实现WebView应用程序。当我尝试加载https url一两次时,它会完成活动。再次尝试加载https url时,它显示网页不可用。请查看下面的图片以了解我得到的内容。

输入图像描述

当我再次单击该网址时,它就会显示该网站。

我使用以下代码加载URL。

webView = (WebView) findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true); 
webView.loadUrl("https://www.facebook.com");
webView.clearView();
webView.measure(100, 100);
webView.getSettings().setUseWideViewPort(true);
webView.getSettings().setLoadWithOverviewMode(true);



    webView.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }

        @SuppressLint("NewApi")
        @Override
        public void onReceivedSslError(WebView view, SslErrorHandler handler,     SslError error) {
            super.onReceivedSslError(view, handler, error);

            // this will ignore the Ssl error and will go forward to your site
            handler.proceed();
            error.getCertificate();
        }
    });

求大家帮帮忙……

提前感谢。


是的,我添加了INTERNET权限。 - Hareesh
它对我有效。请检查您的网络权限。 - Veerababu Medisetti
@Hareesh 我也测试过了。请检查您手机的网络连接是否正常。 - TheFlash
如果您从谷歌搜索进入此页面,请注意:如果您在 Android 5+ 上遇到此问题,并且无法用合理的方式解释,那么这是由于 Chromium 中的错误 导致的!请更新您的应用程序以解决此问题。 - jakub.g
9个回答

12

尝试使用以下属性:

        webView = (WebView) findViewById(R.id.webView1);
        WebSettings settings = webView.getSettings();
        settings.setJavaScriptEnabled(true);
        settings.setDomStorageEnabled(true);

您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - KOTIOS
2
这行代码:settings.setDomStorageEnabled(true); 在我的情况下解决了问题。非常感谢。 - Virthuss

8
在您的manifest.xml文件中添加互联网设置。
<uses-permission android:name="android.permission.INTERNET" />

检查您的设备是否可以访问互联网。


5

删除这个字符串:

super.onReceivedSslError(view, handler, error);

而在这种方法中

public boolean shouldOverrideUrlLoading(WebView view, String url) {

将返回值改为false
就像这样:

 return false;

它帮助了我。

3
你应该将这个移除。
super.OnReceiveSslError(view,handler,error);

2

将此覆盖方法添加到您的WebViewClient实现中。您需要使用Android SDK 2.2(API级别8)或更高版本进行编译。该方法从2.2(API级别8)开始出现在公共SDK中,但我们已经在运行2.1、1.6和1.5的设备上测试过它,并且它也适用于这些设备(因此显然该行为一直存在)。

WebView.setWebViewClient(new WebViewClient() {

     public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error){

         handler.proceed(); 

     }
    });

1

这里的一个可能性是竞争条件。

您在设置WebViewClient之前加载了https://www.facebook.com/,因此,如果您从Facebook那里快速获得响应,您的OnReceivedSslError()实现可能永远不会被调用。

这可以解释为什么它对某些人有效,对其他人无效,并且仅当重新加载页面时才能正常工作。

此外,如果您希望页面加载而不是尝试重新加载页面,我认为您只应该从shouldOverrideUrlLoading()返回false,否则可能会导致无限递归/崩溃-这可能取决于时机。


OP上面列出的代码与我的类似,除了在正确设置WebView和WebViewClient之后加载URL - 我从shouldOverrideUrlLoading()返回false。 - MZB

0

2016年12月的回答:

如果这只发生在某些搭载 Android 5+ 的设备上,并且只发生在某些页面上,那很可能是由于这个Chromium漏洞造成的:

https://www.chromium.org/developers/androidwebview/webview-ct-bug

解决方案有以下几种:

  • 告诉客户更新Webview到55+(并非所有设备都容易实现)
  • 告诉客户将系统时钟向后调整几周(不是一个好的解决方案)
  • 获取非赛门铁克证书

-3

添加你的清单文件

<uses-permission android:name="android.permission.INTERNET" />

每当你访问网页内容时,需要获取互联网权限才能加载。

-5

试试这个

 WebView webview = (WebView)findViewById(R.id.webView); 
    Webview.setBackgroundColor(0);
    webview.getSettings().setJavaScriptEnabled(true); 
    webview.loadUrl("https://www.facebook.com");
    webview.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);

1
...以及它为什么会有帮助? - Selvin

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