From 5fa8cc37e8d7b41a04a4cf70d6cf5d663ac3bc0a Mon Sep 17 00:00:00 2001 From: Lightczx <1686188646@qq.com> Date: Mon, 18 Sep 2023 15:38:23 +0800 Subject: [PATCH] fix #880 --- .../Snap.Hutao/View/Control/WebViewer.xaml.cs | 13 ++++--- .../Web/Bridge/CoreWebView2Navigator.cs | 34 +++++++++++++++++++ 2 files changed, 40 insertions(+), 7 deletions(-) create mode 100644 src/Snap.Hutao/Snap.Hutao/Web/Bridge/CoreWebView2Navigator.cs diff --git a/src/Snap.Hutao/Snap.Hutao/View/Control/WebViewer.xaml.cs b/src/Snap.Hutao/Snap.Hutao/View/Control/WebViewer.xaml.cs index 6120b457..8b774118 100644 --- a/src/Snap.Hutao/Snap.Hutao/View/Control/WebViewer.xaml.cs +++ b/src/Snap.Hutao/Snap.Hutao/View/Control/WebViewer.xaml.cs @@ -10,6 +10,7 @@ using Snap.Hutao.Service.Notification; using Snap.Hutao.Service.User; using Snap.Hutao.ViewModel.User; using Snap.Hutao.Web.Bridge; +using System.Diagnostics; namespace Snap.Hutao.View.Control; @@ -22,7 +23,6 @@ internal partial class WebViewer : UserControl, IRecipient [SuppressMessage("", "IDE0052")] private MiHoYoJSInterface? jsInterface; - private bool isFirstNavigate = true; public WebViewer() { @@ -90,13 +90,12 @@ internal partial class WebViewer : UserControl, IRecipient coreWebView2.SetCookie(user.CookieToken, user.LToken, user.SToken).SetMobileUserAgent(); jsInterface = serviceProvider.CreateInstance(coreWebView2, userAndUid); - if (!isFirstNavigate) - { - coreWebView2.Reload(); - } - coreWebView2.Navigate(source); - isFirstNavigate = false; + CoreWebView2Navigator navigator = new(coreWebView2); + await navigator.NavigateAsync("about:blank"); + Debug.WriteLine($"Before {source}"); + await navigator.NavigateAsync(source); + Debug.WriteLine($"After {WebView.Source}"); } } else diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Bridge/CoreWebView2Navigator.cs b/src/Snap.Hutao/Snap.Hutao/Web/Bridge/CoreWebView2Navigator.cs new file mode 100644 index 00000000..754ae587 --- /dev/null +++ b/src/Snap.Hutao/Snap.Hutao/Web/Bridge/CoreWebView2Navigator.cs @@ -0,0 +1,34 @@ +// Copyright (c) DGP Studio. All rights reserved. +// Licensed under the MIT license. + +using Microsoft.Web.WebView2.Core; +using Windows.Foundation; + +namespace Snap.Hutao.Web.Bridge; + +internal sealed class CoreWebView2Navigator +{ + private readonly TypedEventHandler coreWebView2NavigationCompletedEventHandler; + private readonly CoreWebView2 coreWebView2; + private TaskCompletionSource navigationTask = new(); + + public CoreWebView2Navigator(CoreWebView2 coreWebView2) + { + coreWebView2NavigationCompletedEventHandler = OnWebviewNavigationCompleted; + this.coreWebView2 = coreWebView2; + } + + public async ValueTask NavigateAsync(string url) + { + coreWebView2.NavigationCompleted += coreWebView2NavigationCompletedEventHandler; + coreWebView2.Navigate(url); + await navigationTask.Task.ConfigureAwait(false); + coreWebView2.NavigationCompleted -= coreWebView2NavigationCompletedEventHandler; + } + + private void OnWebviewNavigationCompleted(CoreWebView2 webView2, CoreWebView2NavigationCompletedEventArgs args) + { + navigationTask.TrySetResult(); + navigationTask = new(); + } +} \ No newline at end of file