我有一个基本的 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;
也无济于事
在我的测试中,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 的生命周期方法中获取它。