You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blazor MAUI中Url Scheme链接无法跳转指定Blazor页面求助

.NET MAUI Blazor iOS 唤醒后跳转指定页面解决方案

这个场景完全支持,你已经通过@page指令注册了路由,无需额外配置Blazor路由,核心是要在拦截到URL后正确触发BlazorWebView的导航操作,以下是具体实现步骤:

1. 保存BlazorWebView全局实例

在承载BlazorWebView的主页面(比如MainPage.xaml.cs)中,保存BlazorWebView的全局引用,方便后续调用导航方法:

public partial class MainPage : ContentPage
{
    // 全局静态引用
    public static BlazorWebView AppBlazorWebView { get; private set; }

    public MainPage()
    {
        InitializeComponent();
        // 绑定XAML中BlazorWebView的x:Name(假设你的BlazorWebView命名为MyBlazorWebView)
        AppBlazorWebView = MyBlazorWebView;
    }
}

2. 在AppDelegate中处理URL并触发导航

在iOS项目的AppDelegate.cs中,拦截URL后解析出Blazor路由路径,通过全局引用的BlazorWebView触发导航:

public override bool OpenUrl(UIApplication application, NSUrl url, NSDictionary options)
{
    // 解析URL,提取Blazor路由路径
    // 示例URL: myapp://settings/profile → 提取路径"/settings/profile"
    var blazorRoute = $"/{url.Host}{url.Path}";
    PageSettings.RequestedUri = blazorRoute;

    // 确保在UI线程执行导航操作
    MainThread.BeginInvokeOnMainThread(() =>
    {
        if (MainPage.AppBlazorWebView != null)
        {
            // 直接调用BlazorWebView的导航方法
            MainPage.AppBlazorWebView.NavigateTo(blazorRoute);
        }
    });

    return true;
}

3. 处理应用冷启动场景

如果应用是被URL唤醒(冷启动),此时BlazorWebView可能还未初始化完成,需要在Blazor页面加载完成后检查RequestedUri并跳转:
在Blazor的主布局(比如MainLayout.razor)中添加以下代码:

@inject NavigationManager NavManager

@code {
    protected override async Task OnAfterRenderAsync(bool firstRender)
    {
        if (firstRender)
        {
            var targetRoute = PageSettings.RequestedUri;
            if (!string.IsNullOrWhiteSpace(targetRoute))
            {
                // 强制跳转目标路由,避免缓存影响
                await NavManager.NavigateTo(targetRoute, forceLoad: true);
                // 清空静态变量,防止重复跳转
                PageSettings.RequestedUri = null;
            }
        }
    }
}

关键注意事项

  • URL解析正确性:根据你的自定义URL格式调整路由提取逻辑,确保最终路径和Blazor@page指令的路径完全匹配
  • 线程安全:所有UI相关操作必须在UI线程执行,使用MainThread.BeginInvokeOnMainThread确保这一点
  • 静态变量清理:跳转完成后清空RequestedUri,避免应用后续启动时重复触发跳转

内容的提问来源于stack exchange,提问作者Sam Vanhoutte

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 21:25:53