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

如何在MAUI XAML页面中重新加载BlazorWebView组件

在MAUI Blazor Hybrid中重新加载BlazorWebView的有效方案

直接修改HostPage或置空控件无法触发BlazorWebView的重新初始化,以下是两种可行的实现方式:

方案一:完全重置BlazorWebView(回到初始加载状态)

该方法会彻底重建BlazorWebView实例,恢复到页面首次加载时的状态。

1. 修改XAML布局

先将BlazorWebView放入一个布局容器(如Grid),方便后续替换控件:

<ContentPage
    x:Class="MyApp.MainPage"
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:ios="clr-namespace:Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific;assembly=Microsoft.Maui.Controls"
    xmlns:local="clr-namespace:MyApp"
    ios:Page.UseSafeArea="True"
    BackgroundColor="{DynamicResource PageBackgroundColor}">

    <Grid x:Name="webViewContainer">
        <BlazorWebView x:Name="blazorWebView" HostPage="wwwroot/index.html">
            <BlazorWebView.RootComponents>
                <RootComponent ComponentType="{x:Type local:Components.Routes}" Selector="#app" />
            </BlazorWebView.RootComponents>
        </BlazorWebView>
    </Grid>

</ContentPage>

2. 实现重置逻辑

在MainPage.xaml.cs中添加重新加载方法:

private void ReloadBlazorWebView()
{
    // 移除旧的BlazorWebView控件
    webViewContainer.Remove(blazorWebView);

    // 创建全新的BlazorWebView实例,复制原有配置
    var newBlazorWebView = new BlazorWebView
    {
        HostPage = "wwwroot/index.html",
        RootComponents =
        {
            new RootComponent
            {
                ComponentType = typeof(Components.Routes),
                Selector = "#app"
            }
        }
    };

    // 将新控件添加到布局容器
    webViewContainer.Add(newBlazorWebView);

    // 更新控件引用
    blazorWebView = newBlazorWebView;
}

方案二:仅刷新页面内容(不重置Blazor应用状态)

如果不需要重置Blazor应用的全局状态,只是刷新当前页面内容,可以直接调用平台原生WebView的刷新方法:

private void RefreshCurrentPage()
{
#if ANDROID
    var androidWebView = blazorWebView.Handler.PlatformView as Android.Webkit.WebView;
    androidWebView?.Reload();
#elif IOS
    var iosWebView = blazorWebView.Handler.PlatformView as WebKit.WKWebView;
    iosWebView?.Reload();
#elif WINDOWS
    var winWebView = blazorWebView.Handler.PlatformView as Microsoft.UI.Xaml.Controls.WebView2;
    winWebView?.Reload();
#endif
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 11:12:46