我正在尝试在我的 WebView 中加载 iFrame。视频/iFrame 无法可靠加载
这就是发生的事情:
当我加载屏幕时,在 webview 的位置有空白区域,但最终视频可能会加载,但大多数时候,它不会加载。但是,如果我锁定屏幕并解锁它,视频就会正常加载。
我扩展了 ChromiumWebClient 并记录了以下方法:
onProgressChanged(WebView view, int newProgress) {}
onConsoleMessage(ConsoleMessage consoleMessage) {}
结果视频下载了 80%,引发了安全异常,但它似乎确实在短时间内继续下载并下载了 100%。
尽管下载了 100%,但 webview 不显示视频(播放器)。
但是,如上所述,如果我锁定和解锁屏幕,(现在下载的)视频会正确显示。
iFrame(可以来自任何来源,而不仅仅是 vimeo):
"https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fplayer.vimeo.com%2Fvideo%2F215269493&url=https%3A%2F%2Fvimeo.com%2F215269493&image=https%3A %2F%2Fi.vimeocdn.com%2Fvideo%2F632188996_1280.jpg&key=0a5d85b22c79478aa887a7e8061bef56&type=text%2Fhtml&schema=vimeo' width='525' height='295' scrolling='no' frameborder='0' allowfullscreen>"
网页查看代码:
fun onResume() {
videoWebView.onResume()
}
fun onPause() {
videoWebView.onPause()
}
private fun loadVideo(videoWebView: WebView, iFrame: String) {
videoWebView.setWebViewClient(WebViewClient())
videoWebView.setWebChromeClient(WebChromeClient())
videoWebView.settings.javaScriptEnabled = true
videoWebView.settings.domStorageEnabled = true
videoWebView.settings.loadsImagesAutomatically = true
videoWebView.settings.loadWithOverviewMode = true
videoWebView.loadData(
iFrame,
WebFormatUtil.MIMETYPE_HTML,
WebFormatUtil.ENCODING_UTF8)
}
我确实在清单中启用了硬件加速和互联网权限
日志抛出以下(2 条消息):
I/chromium: [INFO:CONSOLE(11)] "设备方向事件在不安全的来源上已被弃用,并且支持将在未来被删除。您应该考虑将您的应用程序切换到安全的来源,例如 HTTPS。请参阅 https:// /缩短 url以获取更多详细信息。”,来源:https ://f.vimeocdn.com/p/2.69.8/js/player.js (11)
I/chromium: [INFO:CONSOLE(0)] "拒绝加载图像 'android-webview-video-poster:default_video_poster/-1316638038331145773' 因为它违反了以下内容安全策略指令:"img-src 'self' 数据: https://i.vimeocdn.com https://secure-b.vimeocdn.com https://f.vimeocdn.com https://vimeo.com https://secure.gravatar.com https:// i0.wp.com https://i1.wp.com https://i2.wp.com https://player.vimeo.com https://*.ci.vimeows.com https://f.vimeocdn .com “.”,来源:https ://player.vimeo.com/video/215269493 (0)
事实证明,这是 Chromium 客户端中的一个已知问题,尚未修复。
我在寻找什么: 我正在寻找一种方法,当我打开屏幕时,视频就会显示,而无需打开和关闭屏幕。不知道除了破解之外是否还有其他可能。
注意:我已经尝试了很多其他的答案,大部分都是处理其他问题,例如配置等。我已将问题隔离在用于 Android WebView 的 ChromiumClient 中,而其他答案与此无关。