我正在使用自定义的网络视图来播放视频和音频。我需要暂停视频时,单击后退按钮从视频或音频页面。我从这线程尝试了下面的解决方案,但是它不起作用。
string pausefunctionString = @"var videos = document.querySelectorAll('video');
[].forEach.call(videos, function(video) { video.pause(); });
";
web_view.Eval(pausefunctionString);
我的数据有两种格式:
以上解决方案不适用于ios和windows两种格式。但是当webview的源是一个视频URL时,它对android是有效的。当源是HTML数据时,此解决方案在android中无法工作。
为了解析HTML数据,我使用了以下代码:
string htmlData = "htmldata";
var htmlSource = new HtmlWebViewSource();
htmlSource.Html = htmlData;
advanced_web_view.Source = htmlSource;
,我也需要一个透明的背景为我的网页。我尝试了以下2种代码,但没有获得透明的背景。
//code1
this.BackgroundColor = UIColor.Clear;
//code2
this.Opaque = false;
this.BackgroundColor = Color.Transparent.ToUIColor();
更新
我已经解决了视频或音频暂停问题在ios上以一种简单而棘手的方式。
我只是将webview源或Url值设置为如下所示的空白数据。所以当我从视频页面转到另一个页面时,视频就会自动停止。
web_view.Source = "";
web_view.Url= "";
这种方法只适用于ios;对于android和windows,这种方法没有任何效果。那么,请您提出一种在android和windows中暂停视频的方法好吗?
我的数据有两种格式:
当webview的源仅为视频或音频URL时,下面的代码适用于android。当源是HTML数据时,此解决方案在android中无法工作。
string pausefunctionString = @"var videos = document.querySelectorAll('video');
[].forEach.call(videos, function(video) { video.pause(); });
";
web_view.Eval(pausefunctionString);
结论
我还附加了一个更新的不同数据格式的文件。
发布于 2020-06-16 09:59:21
您需要在自定义呈现器中调用JS代码。
在自定义的webview中
public Action<string> EvaluateJS;
public void OnEvaluate(string script)
{
EvaluateJS(script);
}
在自定义渲染器中
protected override void OnElementChanged(ElementChangedEventArgs<MyWebView> e)
{
base.OnElementChanged(e);
if (Control == null)
{
var config = new WKWebViewConfiguration();
config.AllowsInlineMediaPlayback = true;
wkWebView = new WKWebView(Frame, config);
SetNativeControl(wkWebView);
}
if (e.NewElement != null)
{
Control.LoadRequest(new NSUrlRequest(new NSUrl(Element.Url)));
Element.EvaluateJS += (script) =>
{
wkWebView.EvaluateJavaScript(script, (result, error) =>
{
});
};
}
}
用法
private void Button_Clicked(object sender, EventArgs e)
{
string pausefunctionString = @"var videos = document.querySelectorAll('video');
[].forEach.call(videos, function(video) { video.pause(); });
";
web_view.EvaluateJS(pausefunctionString);
}
https://stackoverflow.com/questions/62381618
复制相似问题