gpt4 book ai didi

c# - 在 Xamarin.Forms 中处理 WebView 页面的正确方法是什么?

转载 作者:行者123 更新时间:2023-11-30 05:11:06 26 4
gpt4 key购买 nike

问题

我在 Xamarin.Forms 中有一个应用程序,它在登录屏幕后打开 WebView。

每次用户注销并再次登录时,都会创建一个新的页面和 ViewModel。

通过 Chrome 的远程设备检查设备我仍然可以看到旧的 WebView。

对于导航,我使用了一个自定义 NavigationService,其灵感来自几年前的 Evolve App。

到目前为止我尝试了什么

在弹出 WebView 的页面时处理页面及其 ViewModel。

这是弹出 WebView 页面并返回登录页面的代码

公共(public)异步任务 NavigateBackAsync(bool IgnoraNavegacao){ _isNavigating = true;

try
{
/* Omitted for clarity */

if (currentPage is IDisposable)
((IDisposable)currentPage).Dispose();

if (!(currentPage.GetType() == _homeViewModel))
{
await navigationPage.PopAsync();
}
}
finally
{
_isNavigating = false;
}

页面的 Dispose,其中 Browser 是我在 XAML 中定义的 WebView:

public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}

public virtual void Dispose(bool disposing)
{
if (disposing)
{
Browser = null;

var bindingContext = BindingContext as IDisposable;
bindingContext?.Dispose();

BindingContext = null;
}
}

这是 ViewModel 的Dispose:

public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}

protected virtual void Dispose(bool disposing)
{
if (disposing)
{
OnNavigatingCommand = null;
OnNavigatedCommand = null;
OnBackButtonPressedCommand = null;
}
}

这是我在登录四次后在 Chrome 上看到的:

Chrome Remote Device

有趣的是它第一次“工作”:在我注销并再次登录后,Chrome 上只看到一个 WebView。

如果需要更多信息,请告诉我。

任何指向正确方向的指示都将不胜感激。

最佳答案

当第二个到这个页面时。如果你没有使用单例模式创建webview,那么你将不会获得以前的webview。

所以有两种选择:

一个:

使用单例模式,当在这个页面旁边时,可以得到旧的webview。

两个:

离开页面时,您可以将 WebView 的旧实例设置为 null

OnDisappearing 方法中:

 protected override void OnDisappearing()
{
base.OnDisappearing();
if (null != webView)
{
webView = null;
}
}

或者在 Navigation.PopAsync() 之前执行。

关于c# - 在 Xamarin.Forms 中处理 WebView 页面的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53731562/

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