From 830556a043f9cf940899f26d33503ed65f6c0ade Mon Sep 17 00:00:00 2001
From: DismissedLight <1686188646@qq.com>
Date: Sat, 14 Oct 2023 00:12:14 +0800
Subject: [PATCH] fix ICoreWebView2_13 not supported
---
.../Resource/Localization/SH.Designer.cs | 9 +++++
.../Snap.Hutao/Resource/Localization/SH.resx | 3 ++
.../Snap.Hutao/View/Control/WebViewer.xaml.cs | 35 ++++++++++++++++---
3 files changed, 43 insertions(+), 4 deletions(-)
diff --git a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.Designer.cs b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.Designer.cs
index 4078022e..0584223f 100644
--- a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.Designer.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.Designer.cs
@@ -2418,6 +2418,15 @@ namespace Snap.Hutao.Resource.Localization {
}
}
+ ///
+ /// 查找类似 当前 WebView2 版本不支持管理配置,继续使用可能会导致异常,请尽快升级 的本地化字符串。
+ ///
+ internal static string ViewControlWebViewerCoreWebView2ProfileQueryInterfaceFailed {
+ get {
+ return ResourceManager.GetString("ViewControlWebViewerCoreWebView2ProfileQueryInterfaceFailed", resourceCulture);
+ }
+ }
+
///
/// 查找类似 养成计划 的本地化字符串。
///
diff --git a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx
index 1ea07b40..42fe516e 100644
--- a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx
+++ b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx
@@ -959,6 +959,9 @@
统计
+
+ 当前 WebView2 版本不支持管理配置,继续使用可能会导致异常,请尽快升级
+
养成计划
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 65a276af..8974cdc2 100644
--- a/src/Snap.Hutao/Snap.Hutao/View/Control/WebViewer.xaml.cs
+++ b/src/Snap.Hutao/Snap.Hutao/View/Control/WebViewer.xaml.cs
@@ -2,23 +2,27 @@
// Licensed under the MIT license.
using CommunityToolkit.Mvvm.Messaging;
-using Microsoft.UI.Content;
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
-using Microsoft.UI.Xaml.Hosting;
using Microsoft.Web.WebView2.Core;
using Snap.Hutao.Message;
using Snap.Hutao.Service.Notification;
using Snap.Hutao.Service.User;
using Snap.Hutao.ViewModel.User;
using Snap.Hutao.Web.Bridge;
+using WinRT;
+using WinRT.Interop;
namespace Snap.Hutao.View.Control;
[DependencyProperty("SourceProvider", typeof(IWebViewerSource))]
internal partial class WebViewer : UserControl, IRecipient
{
+ [SuppressMessage("", "SA1310")]
+ private static readonly Guid ICoreWebView2_13iid = Guid.Parse("314B5846-DBC7-5DE4-A792-647EA0F3296A");
+
private readonly IServiceProvider serviceProvider;
+ private readonly IInfoBarService infoBarService;
private readonly RoutedEventHandler loadEventHandler;
private readonly RoutedEventHandler unloadEventHandler;
@@ -28,6 +32,7 @@ internal partial class WebViewer : UserControl, IRecipient
{
InitializeComponent();
serviceProvider = Ioc.Default;
+ infoBarService = serviceProvider.GetRequiredService();
serviceProvider.GetRequiredService().Register(this);
loadEventHandler = OnLoaded;
@@ -43,6 +48,21 @@ internal partial class WebViewer : UserControl, IRecipient
taskContext.InvokeOnMainThread(RefreshWebview2Content);
}
+ private static bool IsCoreWebView2ProfileAvailable(CoreWebView2 coreWebView2)
+ {
+ int hr = ((IWinRTObject)coreWebView2).NativeObject.TryAs(ICoreWebView2_13iid, out ObjectReference objRef);
+ using (objRef)
+ {
+ if (hr >= 0)
+ {
+ // ICoreWebView2_13.Profile is available
+ return true;
+ }
+ }
+
+ return false;
+ }
+
private void OnLoaded(object sender, RoutedEventArgs e)
{
InitializeAsync().SafeForget();
@@ -86,7 +106,14 @@ internal partial class WebViewer : UserControl, IRecipient
string source = SourceProvider.GetSource(userAndUid);
if (!string.IsNullOrEmpty(source))
{
- await coreWebView2.Profile.ClearBrowsingDataAsync();
+ if (IsCoreWebView2ProfileAvailable(coreWebView2))
+ {
+ await coreWebView2.Profile.ClearBrowsingDataAsync();
+ }
+ else
+ {
+ infoBarService.Warning(SH.ViewControlWebViewerCoreWebView2ProfileQueryInterfaceFailed);
+ }
CoreWebView2Navigator navigator = new(coreWebView2);
await navigator.NavigateAsync("about:blank").ConfigureAwait(true);
@@ -101,7 +128,7 @@ internal partial class WebViewer : UserControl, IRecipient
}
else
{
- serviceProvider.GetRequiredService().Warning(SH.MustSelectUserAndUid);
+ infoBarService.Warning(SH.MustSelectUserAndUid);
}
}
}