Как остановить воспроизведение видео в WebView - PullRequest
0 голосов
/ 07 января 2019

Я работаю над приложением Xamarin.Forms (UWP!). Он имеет архитектуру Master-Details. Главная страница имеет ListView, и каждый элемент в ней открывает соответствующую страницу сведений. Первая страница сведений содержит только WebView, который воспроизводит видео YouTube после загрузки. Во втором подробном представлении на данный момент есть только метка-заполнитель. Когда я переключаюсь с первой страницы сведений на вторую, звук видео с первой страницы сведений все еще слышен. И когда я снова переключаюсь на первую страницу сведений, видео загружается снова, и теперь я слышу два голоса. Как я могу остановить видео после перехода на вторую страницу сведений и возобновить при возвращении? Если это невозможно, как я могу просто остановить видео после того, как покину его страницу сведений?

Полагаю, я мог бы что-то сделать в переопределенном методе OnDisappearing () страницы сведений:

    protected override void OnDisappearing()
    {
        MyWebView.NavigateToString(""); // This does not work, as NavigateToString() is not part of WebView. 
        base.OnDisappearing();
    }

Не могли бы вы рассказать, что я могу использовать, чтобы остановить воспроизведение видео в WebView?

Спасибо.

1 Ответ

0 голосов
/ 08 января 2019

Не могли бы вы рассказать, что я могу использовать, чтобы остановить воспроизведение видео в WebView?

По вашему требованию вы можете использовать java-скрипт Eval.

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"/>
...