Webview无法在android中加载https url?

时间:2013-08-22 10:21:02

标签: android android-webview httpsurlconnection

我在android中实现webview应用程序。当我尝试加载 https网址一两次完成活动时。 Agian尝试加载 https网址,表示网页不可用。请在下面找到我得到的图片。

enter image description here

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

我使用以下代码加载网址。

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();
        }
    });

请任何帮助的人.......

提前致谢

9 个答案:

答案 0 :(得分:12)

尝试使用以下属性:

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

答案 1 :(得分:8)

在manifest.xml中添加互联网设置

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

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

答案 2 :(得分:5)

删除此字符串:

super.onReceivedSslError(view, handler, error);

并且在这种方法中

public boolean shouldOverrideUrlLoading(WebView view, String url) {

转回假 像这样:

 return false;

它帮助了我

答案 3 :(得分:3)

你应该删除这个

super.OnReceiveSslError(view,handler,error);

答案 4 :(得分: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(); 

     }
    });

答案 5 :(得分:1)

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

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

这可以解释为什么它适用于某些人,而不适用于其他人,并且在重新加载页面时始终有效。

另外,我认为你应该只是从shouldOverrideUrlLoading()返回false,如果你想加载页面而不是试图重新加载页面 - 这可能会导致无限递归/崩溃 - 可能取决于时间。

答案 6 :(得分:0)

2016年12月回答:

如果只在Android 5+的某些设备上发生这种情况,并且仅在某些页面上发生,则很可能是由于这个铬虫:

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

解决方案是:

  • 告诉客户将webview更新为55+(在所有设备上可能并不容易)
  • 告诉客户将系统时钟向后移动几周(不是一个好的解决方案)
  • 获取非赛门铁克证书

答案 7 :(得分:-3)

添加您的清单文件

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

当您访问网络内容时,需要获得互联网权限,然后才会加载。

答案 8 :(得分:-4)

试试这个

 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);