我花了很多时间试图弄清楚在离开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
}
};
}
}
答案 0 :(得分:1)
使用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
以添加该功能。
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();
}