在Xamarin.Forms应用程序中离开页面后,Webview不会关闭
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Xamarin.Forms应用程序中离开页面后,Webview不会关闭相关的知识,希望对你有一定的参考价值。
在我离开webview页面后,我花了很多时间试图弄清楚如何阻止webview处于活动状态。我之所以发现这一点,是因为Google Play商店拒绝了该应用,因为应用程序违反了youtube的条款和服务。这是因为即使页面已经离开,YouTube视频也会在后台继续播放。我正在使用xamarin.forms在.cs文件中创建webview(如下所示)。以下代码是我在应用程序内显示youtube视频频道的方式。这个目前运行跨平台:ios / android。
试过的解决方案
我试过寻找下面的onPause()解决方案:
@Override
protected void onPause() {
mWebView.onPause();
super.onPause();
}
但是,xamarin webviews无法访问OnPause()。
我也调查过了
Webview.loadUrl("about:blank");
但我不确定如何将其合并到应用程序中,以便每当应用程序离开webview页面时它都会执行。
现行守则
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
,你可以继承WebView
和WebViewRender
来添加该功能。
PausableWebView
Interface:
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();
}
}
Example:
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.Forms应用程序中离开页面后,Webview不会关闭的主要内容,如果未能解决你的问题,请参考以下文章
在 Xamarin.Forms 中使用 MVVM 进行页面导航