2015-07-20 75 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。