【问题标题】:In xamarin Forms how to stop the webview youtube video when go back?返回时如何在 xamarin Forms 中停止 webview youtube 视频?
【发布时间】:2018-09-26 14:20:27
【问题描述】:

如何在返回时停止 youtube 视频在 web 视图中调用 OnDisappearing 方法。

我有以下 XAML 网络视图:

<ContentPage.Content>
    <StackLayout>
       <ActivityIndicator x:Name="Progress" IsEnabled="true" IsVisible="true" IsRunning="true" Color="Blue"/>
       <WebView x:Name="webView" VerticalOptions="FillAndExpand" Navigated="Handle_Navigated" Navigating="Handle_Navigating" />
    </StackLayout>
</ContentPage.Content>

并在我的 .cs 文件中包含以下(修剪过的)代码:

        string name =   o.Link;
        string youtubeLink = "https://www.youtube.com/embed/";
        string url = string.Concat(youtubeLink,name);
        webView.Source = url;

    }

    protected override void OnDisappearing()
    {
        base.OnDisappearing();
        //   webView.IsEnabled = false;

    }

当页面调用 OnDisappearing 方法时,我想停止 webview youtube 视频,但目前不是这样。

【问题讨论】:

    标签: webview xamarin.forms


    【解决方案1】:

    您想要的是停止呈现 WebView。您可以将 WebView Source 设置为随机页面或使用此:

    界面

    public interface ICustomWebViewRenderer
    {
        void Pause();
        void Resume();
    }
    

    Xamarin.FormsCustomWebView:

    public class CustomWebView : WebView
    {
        public ICustomWebViewRenderer Renderer;
    
        public void Pause()
        {
            if (renderer != null) renderer.Pause();
        }
    
        public void Resume()
        {
            if (renderer != null) renderer.Resume();
        }
    }
    

    Xamarin.AndroidCustomWebViewViewRenderer:

    public class CustomWebViewRenderer : WebViewRenderer, ICustomWebViewRenderer
    {
        Android.Webkit.WebView webView;
    
        public CustomWebViewRenderer(Android.Content.Context context) : base(context) { }
    
        protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.WebView> e)
        {
            base.OnElementChanged(e);
    
            webView = Control;
            if (e.OldElement != null)
                (e.OldElement as CustomWebView).Renderer = null;
            if (e.NewElement != null)
                (e.NewElement as CustomWebView).Renderer = this;
        }
    
        public void Pause()
        {
            if (webView != null) webView.OnPause();
        }
    
        public void Resume()
        {
            if (webView != null) webView.OnResume();
        }
    }
    

    示例:

    XAML:

    <local:CustomWebView x:Name="webView" Source="https://youtube.com" />
    

    OnDisappearing / OnAppearing:

    protected override void OnDisappearing()
    {
        webView.Pause();
        base.OnDisappearing();
    }
    
    protected override void OnAppearing()
    {
        base.OnAppearing();
        webView.Resume();
    }
    

    【讨论】:

    • 谢谢。但是实现 webView 的 pause 和 resume 方法的 webkit.webview 文件在哪里
    • 这些是您在 Android 项目的 customrenderer 中调用的原生方法,请参阅文档developer.xamarin.com/api/member/…
    • 当在 customRenderer Android.Webkit.WebView webView 中发生错误时,错误是我的 project.andorid 的命名空间中不存在类型或名称“WebKit”(您是否缺少程序集引用? )
    • 不错,很高兴能帮上忙
    猜你喜欢
    • 2020-01-11
    • 2016-06-21
    • 2016-03-22
    • 2020-12-08
    • 2019-08-28
    • 2021-09-29
    • 2020-09-14
    • 2019-06-02
    • 2020-10-04
    相关资源
    最近更新 更多