首页 > 解决方案 > 在 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);
    }

标签: c#xamarin.forms

解决方案


我使用 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(); 
}

推荐阅读