2015-07-20 44 views
13

我的应用程序打开一个Web视图以显示HTML页面,该页面由HTTPS托管,其中包含一个图像(来自http的图像)。在某些设备上,图像没有显示,但对于所有其他设备,它的工作正常。 我检查了多种设备,如Nexus,三星s6/s4,Moto G2等。只有在三星S4/S6上,nexus图像没有显示。但所有其他设备的工作正常。即使我尝试过使用WI-FI,数据载体和多种操作系统版本,但没有运气。WebView图像未与HTTPS一起显示

请帮忙解决这个问题。

一些观察: -

1)上的每个设备我得到同样的警告: - 在 [阻止该页面“页面URL”装载在HTTPS上,而是显示从不安全的内容' 图片源':此内容也应通过HTTPS加载。

2)同一页如果我在网络浏览器中打开,在所有设备上工作正常。

我的代码

mWebView = (WebView) findViewById(R.id.m_web_view); 
    WebSettings webSettings = mWebView.getSettings(); 
    webSettings.setJavaScriptEnabled(true); 
    mainUrl = bean.getUrl(); 
    mWebView.loadUrl("javascript:window.location.reload(true)"); 
    mWebView.loadUrl(mainUrl); 
    mWebView.setWebViewClient(new myWebClient()); 



    private class myWebClient extends WebViewClient { 

    @Override 
    public void onPageStarted(WebView view, String url, Bitmap favicon) { 
    //some code 
    } 

    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     //some code 
    } 

    @Override 
    public void onReceivedSslError(WebView view, SslErrorHandler handler, 
      SslError error) { 
     handler.proceed(); 
    } 


} 
+0

可能是自签名证书的问题,您可以检查此http 如果是这样的话,你可以棒棒糖使用更改默认的WebView设置: //stackoverflow.com/questions/5977977/does-the-web-view-on-android-support-ssl –

回答

43

默认情况下启动棒棒糖时,在WebView上使用HTTP和HTTPS的混合内容被禁用。有可能是不适用于有棒棒糖的设备?

webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); 

文档在这里: http://developer.android.com/reference/android/webkit/WebSettings.html#setMixedContentMode(int)

+0

谢谢你是救世主:) –

+0

正确的解决方案,谢谢。 –

+0

@AjitSharma对于任何来自Google的人来说,更好的选择可能是使用WebSettings .MIXED_CONTENT_COMPATIBILITY_MODE,因为这会允许图像,视频和其他内容不太可能被用来攻击用户。 – hvaughan3

3

使用follwoing代码。您可以打开使用以下代码HTTPS, 延长WebViewClientonReveivedSslError方法进行,如果发生了任何错误 下面是一个例子

WebView webview= (WebView) findViewById(R.id.my_webview); 
    webview.setWebViewClient(new WebViewClient() { 
    public void onReceivedSslError (WebView view, SslErrorHandler handler, SslError error) { 
    handler.proceed() ; 
    } 

} 
+0

不工作。我在评论中添加了我的代码。请看看,让我知道,如果我错过了任何事情。 –

2

其实是网页流量的SSL属性,因此处理这一点,你将不得不使用以下代码。

engine = (WebView) findViewById(R.id.my_webview); 
engine.setWebViewClient(new WebViewClient() { 
public void onReceivedSslError (WebView view, SslErrorHandler handler, SslError error) { 
handler.proceed() ; 
} 
} 

而在处理程序中,您可以轻松地运行webview图像url。