【问题标题】:WebView images are not showing with HTTPSWebView 图像未使用 HTTPS 显示
【发布时间】:2015-07-20 05:20:38
【问题描述】:

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

请帮助解决这个问题。

一些观察:-

1) 在每台设备上我都收到相同的警告:- [已阻止] 'page url' 处的页面通过 HTTPS 加载,但显示来自 'image source的不安全内容>':此内容也应通过 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();
    }


}

【问题讨论】:

标签: android android-webview


【解决方案1】:

在 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)

【讨论】:

  • 谢谢你是救世主:)
  • @AjitSharma 对于从 Google 来到这里的任何人,更好的选择可能是使用 WebSettings .MIXED_CONTENT_COMPATIBILITY_MODE,因为这将允许图像、视频和其他不太可能用于攻击用户的内容。
  • 像魅力一样工作。拯救了我的一天。谢谢@Pollizzio
  • 并非所有英雄都穿斗篷,为我节省了大量时间!
  • 如果我通过 JAR 文件从类中调用 webview 并且无权访问 webview 对象,我该如何强制执行此设置?
【解决方案2】:

使用以下代码。您可以使用以下代码打开 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() ;
     }

}

【讨论】:

  • 不工作。我在评论中添加我的代码。如果我遗漏了什么,请查看并告诉我。
【解决方案3】:

实际上它是 webview 的 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。

【讨论】:

  • 不要实现这个 onReceivedSslError Google play 会拒绝你的应用
猜你喜欢
  • 2018-11-20
  • 2018-11-11
  • 2011-06-17
  • 1970-01-01
  • 2021-10-30
  • 1970-01-01
  • 2017-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多