2015-07-20 2 views
13

Meine Anwendung öffnet eine Webansicht zum Anzeigen der HTML-Seite, die mit HTTPS gehostet wird enthält ein Bild (Bild kommt von http). Auf einigen Geräten wird das Bild nicht angezeigt, aber für alle anderen Geräte funktioniert es einwandfrei. Ich überprüfte mit mehreren Geräten wie Nexus, Samsung s6/s4, Moto G2 und andere. Nur bei Samsung S4/S6 wird das Nexus-Image nicht angezeigt. aber für alle anderen Geräte funktioniert es gut. Auch ich habe versucht mit WI-FI, Datenträger und mehreren Betriebssystemversionen, aber kein Glück.WebView-Bilder werden nicht mit HTTPS angezeigt

Bitte helfen Sie das zu lösen.

einige Beobachtungen: -

1) An jedem Gerät i gleiche Warnung sind immer: - [gesperrt] Die Seite auf 'Seite url' wurde über HTTPS geladen, aber unsichere Inhalte von "angezeigt Bildquelle ': Dieser Inhalt sollte auch über HTTPS geladen werden.

2) dieselbe Seite, wenn ich im Webbrowser öffne, funktioniert auf allen Geräten gut.

My-Code

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

kann es sich um ein Problem der selbst signiertes Zertifikat ist, können Sie diese unter http: //stackoverflow.com/questions/5977977/does-the-web-view-on-android-support-ssl –

Antwort

43

Gemischter Inhalt mit HTTP und HTTPS auf WebViews ist standardmäßig deaktiviert und startet Lollipop. Ist das möglich, funktioniert das nicht auf Geräten mit Lollipop? Wenn dies der Fall ist, können Sie die Standard WebView Einstellung auf Lollipop mit ändern:

webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); 

Dokumentation hier: http://developer.android.com/reference/android/webkit/WebSettings.html#setMixedContentMode(int)

+0

Danke, du bist der Retter :) –

+0

die richtige Lösung, danke. –

+0

@AjitSharma Für alle, die von Google hierher kommen, könnte es besser sein, 'WebSettings .MIXED_CONTENT_COMPATIBILITY_MODE' zu verwenden, da dies Bilder, Videos und andere Inhalte erlaubt, die weniger dazu benutzt werden, einen Benutzer anzugreifen. – hvaughan3

3

Verwenden Sie den Code follwoing. Sie können https öffnen Sie den folgenden Code verwenden, die onReveivedSslError Methode der WebViewClient erweitern und gehen, wenn irgendein Fehler aufgetreten Hier ist ein Beispiel

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

} 
+0

Funktioniert nicht. Ich füge meinen Code im Kommentar hinzu. Bitte schau und lass mich wissen, wenn ich etwas verpasst habe. –

2

Eigentlich ist es eine SSL-Eigenschaft webview so zu handhaben Sie verwenden müssen folgender Code

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

Und in Handler können Sie Webview Bild URL einfach ausführen.