c# - 在 Xamarin.Forms WebView OnBackButtonPressed 中按下后退按钮时如何检测多个实例的活动窗口
问题描述
我已经包装了一个网页,该应用程序可以显示主页(webwiw)活动的多个实例。当按下硬件后退按钮时 OnBackButtonPressed() 方法被触发,没有参数。它被多次触发(与实例数一样多)。
目前所有可见和不可见的网页都可以返回,或者如果其中任何一个不能返回,可见窗口就会消失。
我需要绕过不可见的实例并在需要时返回可见的 webview。我怎样才能做到这一点?
protected override bool OnBackButtonPressed()
{
var isActiveAndVisible = SomeMagicalCode();
if (isActiveAndVisible && webView.CanGoBack )
{
webView.GoBack();
}
return base.OnBackButtonPressed() || (isActiveAndVisible && webView.CanGoBack);
}
解决方案
我使用 WebView.ClassId 作为指纹;那是我的解决方法。
我创建了一个应用范围的静态变量来跟踪活动的可见实例:
public static class Settings
{
public static string ActiveInstanceId = "";
}
应用程序.xaml.cs
public string InstanceId = "";
public App()
{
InstanceId = Guid.NewGuid().ToString();
}
protected override void OnStart()
{
Settings.ActiveInstanceId = InstanceId;
}
protected override void OnSleep()
{
if(Settings.ActiveInstanceId == InstanceId)
{
Settings.ActiveInstanceId = "";
}
}
MainPage.xaml.cs
public MainPage()
{
WebView.ClassId = ((App)(App.Current)).InstanceId;
}
protected override bool OnBackButtonPressed()
{
if (Settings.ActiveInstanceId == WebView.ClassId)
{
if (WebView.CanGoBack)
{
WebView.GoBack();
return true;
}
}
return base.OnBackButtonPressed();
}
推荐阅读
- c# - 使用 vs 代码运行文件时遇到问题
- css - DIV 图像调整大小的噩梦 - 无法修复
- reactjs - 酶“mount”不渲染“Route”元素
- oracle - 将 Oracle CLOB 字段设置为 null 失败并出现 ORA 22275
- javascript - 如何使用 JSDoc 在 Typescript 中记录 JS 类
- javascript - img.style.width 与 JS 中的 img.width 不一样
- c -
注意:指针指向这里 - c# - Xamarin.forms android Prism 手柄硬件后退按钮
- ruby-on-rails - rails, bootstrap, media-breakpoint-only
- sql - SSRS 多值参数错误