gpt4 book ai didi

xamarin - 离开 Xamarin.Forms 应用程序中的页面后,Webview 不关闭

转载 作者:行者123 更新时间:2023-12-03 05:31:12 24 4
gpt4 key购买 nike

在我离开 webview 页面后,我花了很多时间试图弄清楚如何阻止 webview 处于事件状态。我发现这是因为 Google Play 商店拒绝了该应用程序,因为该应用程序违反了 youtube 的条款和服务。这是因为即使离开页面,youtube 视频也会在后台继续播放。我正在使用 xamarin.forms 在 .cs 文件中创建 webview(见下文)。下面的代码是我在应用程序内显示 youtube 视频 channel 的方式。这目前跨平台运行:ios/android。

尝试过的解决方案

我曾尝试研究像下面的 onPause() 解决方案这样的解决方案:

@Override
protected void onPause() {
mWebView.onPause();
super.onPause();
}

但是,xamarin webviews 无权访问 OnPause()。

我也调查过
Webview.loadUrl("about:blank"); 

但我不确定如何将其合并到应用程序中,以便在应用程序离开网页 View 页面时执行。

当前代码
public partial class YoutubePage : ContentPage
{
public YoutubePage ()
{
InitializeComponent();
WebView webView = new WebView
{
Source = new UrlWebViewSource
{
Url = "https://www.youtube.com/",
},
VerticalOptions = LayoutOptions.FillAndExpand
};

this.Content = new StackLayout
{
Children =
{
webView
}
};
}
}

最佳答案

使用 OnDisappearing将您的 WebView 设置为空白页的生命周期事件:

protected override void OnDisappearing()
{
webView.Source = "about:page";
base.OnDisappearing();
}

使用 OnAppearing将 WebView 的源设置回原始内容的生命周期事件:
protected override void OnAppearing()
{
base.OnAppearing();
webView.Source = "https://youtube.com";
}

如果您希望暂停/恢复 Android.WebKit.WebView,这当然会破坏用户体验。你可以继承 WebViewWebViewRender添加该功能。

PausableWebView

界面:
public interface IPausableWebViewRenderer
{
void Pause();
void Resume();
}
Xamarin.Forms PausableWebView:
public class PausableWebView : WebView
{
public IPausableWebViewRenderer Renderer;

public void Pause()
{
if (renderer != null) renderer.Pause();
}

public void Resume()
{
if (renderer != null) renderer.Resume();
}
}
Xamarin.Android PausableWebViewRenderer:
public class PausableWebViewRenderer : WebViewRenderer, IPausableWebViewRenderer
{
Android.Webkit.WebView webView;

public PausableWebViewRenderer(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 PausableWebView).Renderer = null;
if (e.NewElement != null)
(e.NewElement as PausableWebView).Renderer = this;
}

public void Pause()
{
if (webView != null) webView.OnPause();
}

public void Resume()
{
if (webView != null) webView.OnResume();
}
}

例子:
XAML :
<local:PausableWebView x:Name="webView" Source="https://youtube.com" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand" />
OnDisappearing/ OnAppearing :
protected override void OnDisappearing()
{
webView.Pause();
base.OnDisappearing();
}

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

关于xamarin - 离开 Xamarin.Forms 应用程序中的页面后,Webview 不关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47965170/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com