如何在 WebView 中停止视频播放
Posted
技术标签:
【中文标题】如何在 WebView 中停止视频播放【英文标题】:How to stop video playing in WebView 【发布时间】:2019-06-02 05:28:33 【问题描述】:我在 Xamarin.Forms 应用程序 (UWP!) 上工作。它具有主从架构。 Master 页面有一个 ListView,其中的每个项目都会打开一个相应的 Detail 页面。第一个详细信息页面只有一个 WebView,它在加载时播放 YouTube 视频。第二个细节视图现在只有一个占位符标签。
当我从第一个详细信息页面切换到第二个详细信息页面时,仍然可以听到第一个详细信息页面的视频声音。当我切换回第一个详细信息页面时,视频再次加载,现在我听到两个声音。如何在切换到第二个详细信息页面时停止视频并在返回时恢复?如果这是不可能的,我该如何在离开其详细信息页面时停止视频?
我想我可以在详细信息页面的重写 OnDisappearing() 方法中做一些事情:
protected override void OnDisappearing()
MyWebView.NavigateToString(""); // This does not work, as NavigateToString() is not part of WebView.
base.OnDisappearing();
我可以用什么来停止在 WebView 中播放视频?
【问题讨论】:
【参考方案1】:您能否告诉我可以使用什么来停止在 WebView 中播放视频?
根据您的要求,您可以注入Eval
java 脚本。
private void Button_Clicked(object sender, EventArgs e)
string pausefunctionString = @"
var videos = document.querySelectorAll('video');
[].forEach.call(videos, function(video) video.pause(); );
";
MyWebView.Eval(pausefunctionString);
更新
我已经重新检查了您的问题,当您导航到另一个页面时,WebView
没有正确释放。如果您想停止WebView
视频播放,可以通过自定义WebViewRenderer
使其导航到空白页面。
[assembly: ExportRenderer(typeof(WebView), typeof(CustomWebViewRender))]
namespace App4.UWP
class CustomWebViewRender : WebViewRenderer
private Windows.UI.Xaml.Controls.WebView _WebView;
protected override void OnElementChanged(ElementChangedEventArgs<WebView> e)
base.OnElementChanged(e);
if (Control != null)
var source = Element.Source as UrlWebViewSource;
_WebView = new Windows.UI.Xaml.Controls.WebView();
SetNativeControl(_WebView);
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
base.OnElementPropertyChanged(sender, e);
if (e.PropertyName == WebView.SourceProperty.PropertyName)
var source = Element.Source as UrlWebViewSource;
if (source.Url == string.Empty)
_WebView.NavigateToString(string.Empty);
用法
protected override void OnAppearing()
base.OnAppearing();
MyWebView.Source = "https://www.youtube.com";
protected override void OnDisappearing()
MyWebView.Source = string.Empty;
base.OnDisappearing();
Xaml
<WebView HeightRequest="500" WidthRequest="500" x:Name="MyWebView"/>
【讨论】:
感谢您的回答。请问,document.querySelectorAll('video') 中的'video' 是什么?因为当我尝试按原样使用代码时,它给了我空引用异常。 即htmlvideo
标签。
我不确定我是否理解。我在 xaml 中没有任何视频标签。
嗨@DavidShochet,我已经检查了您的问题并回复了答案。
我试过了,但是Eval函数在OnDisappearing方法中不起作用。以上是关于如何在 WebView 中停止视频播放的主要内容,如果未能解决你的问题,请参考以下文章
YouTube 视频未在 WebView 中播放 - Android
在 mediaplayer 中播放的 Android webview 视频
为啥 HTML5 视频不能在 IOS 8 WebApp(webview) 中播放?
如何在没有 UIWebView 的情况下播放 youtube 视频或在 youtube 视频开始使用 webview 播放时检测视频播放器?