WebView 图像未使用 HTTPS 显示
WebView images are not showing with HTTPS
我的应用程序打开一个 Web 视图以显示 HTML 页面,该页面使用 HTTPS 托管,包含一张图片(来自 http 的图片)。在某些设备上图像未显示,但对于所有其他设备,它工作正常。
我检查了 Nexus、Samsung s6/s4、Moto G2 等多种设备。仅在三星 S4/S6 上,nexus 图像未显示。但对于所有其他设备,它工作正常。即使我尝试使用 WI-FI、数据载体和多个 OS 版本,但没有成功。
请帮助解决这个问题。
一些观察:-
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();
}
}
使用以下代码。可以使用以下代码打开https,扩展WebViewClient
的onReveivedSslError
方法,如果有错误继续
这是一个例子
WebView webview= (WebView) findViewById(R.id.my_webview);
webview.setWebViewClient(new WebViewClient() {
public void onReceivedSslError (WebView view, SslErrorHandler handler, SslError error) {
handler.proceed() ;
}
}
实际上它是 webview 的 SSL 属性 所以要处理这个你必须使用下面的代码。
engine = (WebView) findViewById(R.id.my_webview);
engine.setWebViewClient(new WebViewClient() {
public void onReceivedSslError (WebView view, SslErrorHandler handler, SslError error) {
handler.proceed() ;
}
}
并且在处理程序中,您可以 运行 网络视图图像 url 轻松。
在 WebViews 上使用 HTTP 和 HTTPS 的混合内容在默认启动 Lollipop 时被禁用。这可能不适用于带有 Lollipop 的设备吗?
如果是这种情况,您可以使用以下方法更改 Lollipop 上的默认 WebView 设置:
webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
此处的文档:
http://developer.android.com/reference/android/webkit/WebSettings.html#setMixedContentMode(int)
我的应用程序打开一个 Web 视图以显示 HTML 页面,该页面使用 HTTPS 托管,包含一张图片(来自 http 的图片)。在某些设备上图像未显示,但对于所有其他设备,它工作正常。 我检查了 Nexus、Samsung s6/s4、Moto G2 等多种设备。仅在三星 S4/S6 上,nexus 图像未显示。但对于所有其他设备,它工作正常。即使我尝试使用 WI-FI、数据载体和多个 OS 版本,但没有成功。
请帮助解决这个问题。
一些观察:-
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();
}
}
使用以下代码。可以使用以下代码打开https,扩展WebViewClient
的onReveivedSslError
方法,如果有错误继续
这是一个例子
WebView webview= (WebView) findViewById(R.id.my_webview);
webview.setWebViewClient(new WebViewClient() {
public void onReceivedSslError (WebView view, SslErrorHandler handler, SslError error) {
handler.proceed() ;
}
}
实际上它是 webview 的 SSL 属性 所以要处理这个你必须使用下面的代码。
engine = (WebView) findViewById(R.id.my_webview);
engine.setWebViewClient(new WebViewClient() {
public void onReceivedSslError (WebView view, SslErrorHandler handler, SslError error) {
handler.proceed() ;
}
}
并且在处理程序中,您可以 运行 网络视图图像 url 轻松。
在 WebViews 上使用 HTTP 和 HTTPS 的混合内容在默认启动 Lollipop 时被禁用。这可能不适用于带有 Lollipop 的设备吗? 如果是这种情况,您可以使用以下方法更改 Lollipop 上的默认 WebView 设置:
webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
此处的文档: http://developer.android.com/reference/android/webkit/WebSettings.html#setMixedContentMode(int)