Android WebView 混合内容未在 api 级别 < 21 中加载

Posted

技术标签:

【中文标题】Android WebView 混合内容未在 api 级别 < 21 中加载【英文标题】:Android WebView mixed content not load in api level < 21 【发布时间】:2017-09-21 16:22:54 【问题描述】:

我想使用 WebView 在我的 andoird 应用程序上加载第三方网址 (http://domain1.com)。此 url 有一个 iframe 与其他域 (http://domain2.com) 有一个视频播放器。页面加载成功,但是在播放视频时不加载(当设备的 api 级别为 Blocked a frame with origin "http://domain2.com" from access a frame来源为“http://www.domain1.com”的协议、域和端口必须匹配。当设备的 api 级别 >= 21 时工作正常。

WebView 的代码:

WebView myWebView = (WebView) view.findViewById(R.id.webView);

myWebView.getSettings().setjavascriptEnabled(true);
myWebView.getSettings().setAllowUniversalAccessFromFileURLs(true);
myWebView.getSettings().setAllowFileAccessFromFileURLs(true);

myWebView.setWebChromeClient(new WebChromeClient());

myWebView.loadUrl(urlWin);

if (Build.VERSION.SDK_INT >= 21) 
    myWebView.getSettings().setMixedContentMode( WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE );
 else 
    // Code for Build.VERSION.SDK_INT < 21

如何在 api 级别

网址是:http://www.winsports.co/liga-aguila-2017-i/multimedia/galeria-compactos/repasa-aqui-los-goles-del-triunfo-de-cali-sobre-junior-72384

【问题讨论】:

【参考方案1】:

引用developer.android.com:

与 setMixedContentMode(int) 一起使用 在此模式下,WebView 将尝试与现代 Web 浏览器在混合内容方面的方法兼容。某些不安全的内容可能会被允许由安全源加载,而其他类型的内容将被阻止。允许或阻止的内容类型可能会因版本而异,并且没有明确定义。此模式旨在供无法控制其呈现的内容但希望在相当安全的环境中运行的应用程序使用。为获得最高安全性,建议应用使用 MIXED_CONTENT_NEVER_ALLOW。

代码示例:

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

【讨论】:

至少解释一下区别,如果有的话。 @Mr. B 我添加了一些来自开发者网站的描述,希望现在能回答这个问题 问题是关于如何在 API 级别低于 21 的情况下处理这种情况,因为仅在该版本中添加了 MIXED_CONTENT_COMPATIBILITY_MODE

以上是关于Android WebView 混合内容未在 api 级别 < 21 中加载的主要内容,如果未能解决你的问题,请参考以下文章

视频未在 Webview android (Google TV) 内播放

YouTube 视频未在 WebView 中播放 - Android

HTML5 视频未在 android webview 中播放

Android 模拟器未在 webview 中显示 html5 画布

音频和视频未在 Android WebView HTML5 中播放

Android webview +javascript 未在 android 4.0.x,3.x 中显示输出