0

我有一个使用 MAUI Hybrid 来生成 Android 应用程序(apk)的项目。BlazorWebView 在 MAUI 应用程序中运行,因此网站(un Blazor Wasm)和 MAUI 应用程序(MAUI + Blazor WebView)都使用页面代码。

MAUI 应用程序中包含 blazorWebView(代码来自 MainPage.xaml):

<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:b="clr-namespace:Microsoft.AspNetCore.Components.WebView.Maui;assembly=Microsoft.AspNetCore.Components.WebView.Maui"
             xmlns:local="clr-namespace:MyMauiBlazor"
             x:Class="MyMauiBlazor.MainPage">

    <b:BlazorWebView HostPage="wwwroot/index.html">
        <b:BlazorWebView.RootComponents>
            <b:RootComponent Selector="app" ComponentType="{x:Type local:Main}" />
        </b:BlazorWebView.RootComponents>
    </b:BlazorWebView>

</ContentPage>

Android 设备上,是否可以处理按下的后退按钮

目前,应用程序关闭,但我想处理此事件(例如:导航到上一页)。有没有办法做到这一点 ?

4

1 回答 1

0

我和你有同样的问题,微软官方还不支持 MAUI blazor 的后退键导航,但我找到了一个临时解决方案:

首先,您必须创建一个 javascript 文件,并将其放在 wwwroot 文件夹中,并将其包含在 index.html 文件中。在 js 文件中放入以下代码:

window.goBack = () => {
   history.go(-1);
}

然后你必须创建 ac# 类并使其成为服务,例如我创建了一个名为 GoBack.cs 的类。要将其设置为服务,只需将此代码放入 MauiProgram.cs:

builder.Services.AddTransient<GoBack>();

在 GoBack 类中,您必须创建一个静态变量和方法,否则您将无法使用 IJSRuntime 互操作。我的 GoBack 文件如下:

public class GoBack 
{
    private static IJSRuntime JSRuntime { get; set; }

    public GoBack(IJSRuntime jSRuntime)
    {
        GoBack.JSRuntime = jSRuntime;
    }
   
    public static async Task GoBackInTime()
    {
        //Microsoft.Maui.Platform;
        if (GoBack.JSRuntime != null)
        {
            await GoBack.JSRuntime.InvokeVoidAsync("goBack");
        }
    }

    
}

GoBackInTime 方法将通过 jsInteroperability 调用 js 方法 goBack。现在您必须在加载此服务的第一个 blazor 页面中注入。

@inject GoBack goBack

这样cs文件中的jsRuntime就会被初始化并且不为null。

现在您所要做的就是覆盖 MainPage.xaml.cs 中的 OnBackButtonPressed 方法:

protected override bool OnBackButtonPressed()
{
    GoBack.GoBackInTime();
    return true;
}

这样,当按下后退按钮时,它不会退出应用程序(因为我们正在返回 true),同时调用 js 函数,因此 blazor 页面将导航到上一页。

于 2022-02-18T10:47:55.873 回答