Xamarin Forms:以编程方式暂停在 webview 中播放的视频或音频
Xamarin Forms: Pause the video or audio playing in webview programattically
我正在使用自定义 webview 播放视频和音频。单击视频或音频页面的后退按钮时,我需要暂停视频。我从 线程尝试了以下解决方案,但它不起作用。
string pausefunctionString = @"var videos = document.querySelectorAll('video');
[].forEach.call(videos, function(video) { video.pause(); });
";
web_view.Eval(pausefunctionString);
我的数据有两种格式:
- 单独的视频或音频 link。
- HTML 具有多个视频的数据 links.
以上解决方案不适用于 ios 和 windows 这两种格式。但是当 webview 的源是视频 URL 时,它适用于 android。当源是 HTML 数据时,此解决方案在 android.
中不起作用
为了解析 HTML 数据,我使用以下代码:
string htmlData = "htmldata";
var htmlSource = new HtmlWebViewSource();
htmlSource.Html = htmlData;
advanced_web_view.Source = htmlSource;
另外,我的 webview 需要透明背景。我尝试了以下 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 中暂停视频的方法?
我的数据有两种格式:
- 单独的视频或音频 link。
- HTML 数据有视频 links.
下面的代码适用于 android 当 webview 的来源是单独的视频或音频 URL 时。当源是 HTML 数据时,此解决方案在 android 中不起作用。
string pausefunctionString = @"var videos = document.querySelectorAll('video');
[].forEach.call(videos, function(video) { video.pause(); });
";
web_view.Eval(pausefunctionString);
结论
- 对于 windows 两种数据格式(如上所述),视频或音频暂停都不起作用,需要针对此问题的解决方案。
- 对于 Android,当源是 HTML 数据时,视频不会暂停,需要解决此问题。
- 我想我们可以忘记在ios平台上暂停的视频。
我还附上了不同数据格式的更新 file。
您需要在自定义渲染器中调用 JS 代码
在自定义网络视图中
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);
}
我正在使用自定义 webview 播放视频和音频。单击视频或音频页面的后退按钮时,我需要暂停视频。我从
string pausefunctionString = @"var videos = document.querySelectorAll('video');
[].forEach.call(videos, function(video) { video.pause(); });
";
web_view.Eval(pausefunctionString);
我的数据有两种格式:
- 单独的视频或音频 link。
- HTML 具有多个视频的数据 links.
以上解决方案不适用于 ios 和 windows 这两种格式。但是当 webview 的源是视频 URL 时,它适用于 android。当源是 HTML 数据时,此解决方案在 android.
中不起作用为了解析 HTML 数据,我使用以下代码:
string htmlData = "htmldata";
var htmlSource = new HtmlWebViewSource();
htmlSource.Html = htmlData;
advanced_web_view.Source = htmlSource;
另外,我的 webview 需要透明背景。我尝试了以下 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 中暂停视频的方法?
我的数据有两种格式:
- 单独的视频或音频 link。
- HTML 数据有视频 links.
下面的代码适用于 android 当 webview 的来源是单独的视频或音频 URL 时。当源是 HTML 数据时,此解决方案在 android 中不起作用。
string pausefunctionString = @"var videos = document.querySelectorAll('video');
[].forEach.call(videos, function(video) { video.pause(); });
";
web_view.Eval(pausefunctionString);
结论
- 对于 windows 两种数据格式(如上所述),视频或音频暂停都不起作用,需要针对此问题的解决方案。
- 对于 Android,当源是 HTML 数据时,视频不会暂停,需要解决此问题。
- 我想我们可以忘记在ios平台上暂停的视频。
我还附上了不同数据格式的更新 file。
您需要在自定义渲染器中调用 JS 代码
在自定义网络视图中
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);
}