From 55e1f754c5decb2eebd22948f40fb7c5f7e40539 Mon Sep 17 00:00:00 2001 From: SuperDooper <37051355+superdooper86@users.noreply.github.com> Date: Fri, 8 May 2026 16:11:54 +0200 Subject: [PATCH] fix: switch WebViewFetchWindow to WebMessageReceived for script results --- windows/WebViewFetchWindow.cs | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/windows/WebViewFetchWindow.cs b/windows/WebViewFetchWindow.cs index f36bee8..78d944f 100644 --- a/windows/WebViewFetchWindow.cs +++ b/windows/WebViewFetchWindow.cs @@ -34,25 +34,34 @@ internal sealed class WebViewFetchWindow : Window await _wv.EnsureCoreWebView2Async(env); - var tcs = new TaskCompletionSource(); + var tcs = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); - EventHandler? handler = null; - handler = async (_, e) => + // Use WebMessageReceived so the script can post back asynchronously without + // relying on Promise-awaiting support in the WebView2 runtime version. + EventHandler? msgHandler = null; + msgHandler = (_, args) => { - _wv.CoreWebView2.NavigationCompleted -= handler; + _wv.CoreWebView2.WebMessageReceived -= msgHandler; + tcs.TrySetResult(args.WebMessageAsString); + }; + _wv.CoreWebView2.WebMessageReceived += msgHandler; + + EventHandler? navHandler = null; + navHandler = async (_, e) => + { + _wv.CoreWebView2.NavigationCompleted -= navHandler; if (!e.IsSuccess) { tcs.TrySetResult(null); return; } - try - { - var result = await _wv.CoreWebView2.ExecuteScriptAsync(script); - tcs.TrySetResult(result); - } + try { await _wv.CoreWebView2.ExecuteScriptAsync(script); } catch { tcs.TrySetResult(null); } }; - - _wv.CoreWebView2.NavigationCompleted += handler; + _wv.CoreWebView2.NavigationCompleted += navHandler; _wv.CoreWebView2.Navigate(navigateUrl); - _ = Task.Delay(timeoutMs).ContinueWith(_ => tcs.TrySetResult(null)); + _ = Task.Delay(timeoutMs).ContinueWith(_ => + { + _wv.CoreWebView2.WebMessageReceived -= msgHandler; + tcs.TrySetResult(null); + }); return await tcs.Task; }