2013-08-22 148 views
14

我在android中实现webview应用程序。当我试图加载https网址一两次完成活动。 Agian试图加载https url它显示网页不可用。请找到下面的图片我得到了什么。Webview无法在android中加载https url?

enter image description here

当我再次在该网址上点击,那么它显示的网站开通。

我用下面的代码来加载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(); 
     } 
    }); 

请任何帮助球员.......

在此先感谢

+0

是我加了INTERNET权限 – Hareesh

+0

这对我很有用。请检查您的网络权限。 –

+0

@Hareesh我也在电话中测试过。 – TheFlash

回答

8

添加在您的manifest.xml互联网设置

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

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

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

...为什么它应该帮助? – Selvin

1

一种可能是一个竞争条件。

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

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

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

+0

你有一些代码吗? –

+0

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

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

    } 
    }); 
12

尝试下面使用属性:

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

这个工作! http://stackoverflow.com/questions/7416096/android-webview-not-loading-https-url/28668862#28668862 – KOTIOS

+2

此行: settings.setDomStorageEnabled(true);在我的情况下, 做了诡计。非常感谢。 – Virthuss

+1

对我来说,setDomStorageEnabled也有窍门! – olleh

-3

添加您的清单文件

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

2016年12月回答:

如果发生这种情况只在与Android 5+,只有在某些页面某些设备,它最有可能是由于这个铬错误:

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

的解决方案是:

  • 告诉客户更新的WebView到55+(可能不容易上的所有设备)
  • 告诉客户向后移动他们的系统时钟数周(不是很好的解决方案)
  • 获得非Symantec证书