Android WebView无法加载混合内容

我正在尝试使用WebView制作应用程序,但网站使用https ,但内容(例如mp3文件)使用http ,因此Android Lollipop不会加载它,因为它是“混合内容”。 我试图使用onReceivedSslError handler.proceed(); ,但它没有加载任何东西。 有办法解决吗? 或者我可以让所有网站加载使用http ,所以它没有显示任何错误?

  • 使用NextRTC Spring Signaling Server的Android WebView中的WebRTC
  • 如何修复“因为我们正在等待WebCore对触摸的响应而错过拖动”
  • Android WebView显示一个空白页面
  • WebView不会第二次加载我的HTML?
  • 如何在Android上的WebView中提高JS可拖动菜单的性能
  • WebView线程永远不会停止(WebViewCoreThread,CookieSyncManager,http )
  • Androidnetworking视图中的iframevideo不会进入全屏模式
  • 滚动选项卡中的片段时隐藏/显示工具栏
  • 自Lollipop(API 21)以来,WebView默认阻止所有混合内容 。

    要更改此行为, 当您定位API级别21或更高级别时 ,请使用:

     webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE); 

    在此模式下,WebView将尝试与混合内容相关的现代Web浏览器方法兼容。 可以允许一些不安全的内容由安全起源加载,并且将阻止其他types的内容。 允许或阻止的内容types可能会将发布更改为发布,并且未明确定义。

    在实践中,这应该允许加载图像,video,音乐等 – 所有内容在被恶意第三方篡改/替换时具有主要安全威胁的可能性较低。


    或者使用(强烈劝阻)

     webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); 

    在此模式下,WebView将允许安全来源加载来自任何其他来源的内容,即使该来源不安全。 这是WebView的最不安全的操作模式,并且可能的应用程序不应设置此模式。

    如果您的min API小于21且无法直接调用setMixedContentMode,则可以使用reflection:

     try { Method m = WebSettings.class.getMethod("setMixedContentMode", int.class); if ( m == null ) { Log.e("WebSettings", "Error getting setMixedContentMode method"); } else { m.invoke(webView.getSettings(), 2); // 2 = MIXED_CONTENT_COMPATIBILITY_MODE Log.i("WebSettings", "Successfully set MIXED_CONTENT_COMPATIBILITY_MODE"); } } catch (Exception ex) { Log.e("WebSettings", "Error calling setMixedContentMode: " + ex.getMessage(), ex); } 

    要在API> = 21上有条件地加载它, 您不必使用reflection

     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE); }