在 MAUI xaml 页面中重新加载 BlazorWebView

问题描述 投票:0回答:1

我有一个基本的 MAUI Blazor 混合应用程序,带有一个 xaml 页面:MainPage.xaml,其中有一个组件,BlazorWebView

<?xml version="1.0" encoding="utf-8" ?>
<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}">

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

</ContentPage>

我希望能够重新加载 BlazorWebView 的内容(加载它,就像我刚刚到达 MainPage.xaml 一样)

我尝试过做

var hostPage = blazorWebView.HostPage;
blazorWebView.HostPage = null;
blazorWebView.HostPage = hostPage;

但这没有效果。

即使设置

blazorWebView = null;
也无济于事

c# maui maui-blazor
1个回答
0
投票

在我的测试中,blazorwebview的默认url是https://0.0.0.0/,所以你可以调用平台代码重新加载url。但为了使 url 始终正确,我以编程方式获取它。

在主页中:

public partial class MainPage : ContentPage
    {
        public string url;
        public BlazorWebView view;
        public MainPage()
        {
            InitializeComponent();
            view = blazorWebView;
        }
        public void Reload()
        {
#if Android
            var androidweb = blazorWebView.Handler.PlatformView as Android.Webkit.WebView;
            androidweb.LoadUrl(url);
#elif WINDOWS
            var windowweb = blazorWebView.Handler.PlatformView as Microsoft.UI.Xaml.Controls.WebView2;
            windowweb.Source = new Uri(url);
#elif IOS
            var iosweb = blazorWebView.Handler.PlatformView as WebKit.WKWebView;
            iosweb.LoadRequest(new Foundation.NSUrlRequest(new Uri(url)));
#endif
        }
    }

在家中。剃须刀:

@code{
   protected override void OnInitialized()
   {
       base.OnInitialized();
#if Android
        var androidweb = (App.Current.MainPage as MainPage).view.Handler.PlatformView as Android.Webkit.WebView;
             (App.Current.MainPage as MainPage).url = androidweb.Url;
#elif WINDOWS
        var windowweb = (App.Current.MainPage as MainPage).view.Handler.PlatformView as Microsoft.UI.Xaml.Controls.WebView2;
             (App.Current.MainPage as MainPage).url = windowweb.Source.ToString();
#elif IOS
        var iosweb = (App.Current.MainPage as MainPage).view.Handler.PlatformView as WebKit.WKWebView;
             (App.Current.MainPage as MainPage).url = iosweb.Url.ToString();
#endif
   }
}

然后你可以调用 Reload 方法来重新加载 blazor webview。为什么我在 Home.Razor 中获取默认 Url 是因为我无法在 MainPage 的生命周期方法中获取它。

© www.soinside.com 2019 - 2024. All rights reserved.