由于违反安全政策,WebView无法加载iFrame视频

rgv

我正在尝试在WebView中加载iFrame。视频/ iFrame无法可靠加载

这是发生了什么:

当我加载屏幕时,在webview的地方有空白,但是最终视频可能会加载,但是大多数时候它不会加载。但是,如果我锁定屏幕并解锁,视频加载就很好。

我扩展了ChromiumWebClient并记录了以下方法:

onProgressChanged(WebView view, int newProgress) {}
onConsoleMessage(ConsoleMessage consoleMessage) {}

原来,视频下载量达到了80%,因此引发了安全异常,但它似乎确实会在短时间内继续下载并下载100%。

尽管下载了100%,但网络视图未显示视频(播放器)。

但是,如上所述,如果我锁定和解锁屏幕,(现在下载的)视频会正确显示。

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

我确实在清单中启用了hardwareAcceleration和Internet权限

日志抛出以下(2条消息):

I /铬:[INFO:CONSOLE(11)]“不安全的来源不推荐使用deviceorientation事件,将来将取消支持。您应考虑将应用程序切换到安全来源,例如HTTPS。请参见https:/ /缩短网址以获取更多详细信息。”,来源:https//f.vimeocdn.com/p/2.69.8/js/player.js(11)

I /铬:[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客户端中已知问题,尚未解决。

我正在寻找的是:我正在寻找一种方式,使我在打开屏幕时就可以显示视频,而不必打开和关闭屏幕。除了黑客入侵之外,不确定是否有其他可能。

注意:我尝试了许多其他答案,其中大多数都处理其他问题,例如config等。我已将问题隔离在用于Android WebView的ChromiumClient中,而其他答案则无关。

rgv

这是我解决问题的方式:

private fun loadVideo(videoWebView: WebView, iFrame: String) {
    webView.setWebChromeClient(object: WebChromeClient() {
                override fun onConsoleMessage(consoleMessage: ConsoleMessage): Boolean {
                    if (consoleMessage.messageLevel() == ConsoleMessage.MessageLevel.ERROR) {
                        webView.onResume()
                    }
                    return super.onConsoleMessage(consoleMessage)
                }
            })
      //......rest of the method like before
    }

每次锁定/解锁屏幕后,视频都会正常显示。这意味着onPause()onResume()被在webView内部触发。

此外,每次发生安全异常时onConsoleMessage(consoleMessage: ConsoleMessage),Chromium客户端都会使用标签ERROR触发。

到目前为止,从我的测试来看,这是很安全的。在解决实际问题之前,这对我有用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章