Android WebView仅显示iframe中包含全屏视频的黑屏

时间:2019-03-01 23:38:39

标签: android html5 iframe

问题

我正在React Native应用程序中运行Cordova WebView的自定义版本。在网站上,有一个嵌入的视频,例如来自YouTube,我的CDN等的视频,它们被包装在$FunctionSettings = @{ "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING" = "*******"; "WEBSITE_CONTENTSHARE" = "TestFunction123"; "AzureWebJobsStorage" = "*******"; "FUNCTIONS_EXTENSION_VERSION" = "~2"; "FUNCTIONS_WORKER_RUNTIME" = "dotnet"; "WEBSITE_NODE_DEFAULT_VERSION" = "10.14.1"; } Set-AzureRmWebApp -ResourceGroupName "RGN" -AppSettings $FunctionSettings -Name "TestFunction" 标签中。当我单击全屏时,屏幕变黑,并且我只听到音频播放。

我的尝试

我已尝试解决有关StackOverflow的许多建议,例如:

  • <iframe>
  • 已实现自定义android:hardwareAccelerated=trueonShowCustomView
onHideCustomView

问题

问题尚未解决,似乎没有任何变化。在调试器上的以下堆栈跟踪显示:  -参数 @Override public void onShowCustomView(View v, WebChromeClient.CustomViewCallback cb) { if (mVideoView != null) { cb.onCustomViewHidden(); } else { FrameLayout f = (FrameLayout) v; mVideoView = v; mWebView.setVisibility(View.GONE); f.getChildAt(0).setFocusable(true); mCustomView = new FrameLayout(mWebView.getContext()); mCustomView.setVisibility(View.VISIBLE); mCustomView.addView(mVideoView); getWebViewParent().addView(mCustomView, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); mVideoCallback = cb; } } @Override public void onHideCustomView() { super.onHideCustomView(); if (mVideoView == null) { return; } mWebView.setVisibility(View.VISIBLE); mCustomView.setVisibility(View.GONE); mVideoView.setVisibility(View.GONE); mCustomView.removeView(mVideoView); getWebViewParent().removeView(mCustomView); mVideoCallback.onCustomViewHidden(); mVideoView = null; } 的(唯一)子对象未集中  -视频视图的类别为View v,属于Android Chrome。

解决此问题的建议解决方案是什么?谢谢。

1 个答案:

答案 0 :(得分:0)

解决方案正确地发布在这里: Webview and iFrame Video full screen issue

基本上,问题在于VideoView不应与WebView处于同一层次结构或子视图层次结构中。 Java中onShowCustomView的快速实现如下所示:

mVideoView.setLayout(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
mVideoView.setVisibility(View.VISIBLE);
webViewRoot.addView(mVideoView);
webViewDirectParent.setVisibility(View.GONE);