Не выполняется JS скрипт (return) при работе с WebView2 C#

Есть код, который при нажатии кнопки (WPF) записывает действия в браузере через драйвер webView с помощью JS. Далее действия парсятся в методе GetActionsAsync. По какой-то причине result там всегда null, при return JS скрипта:

string result = await webView.CoreWebView2.ExecuteScriptAsync("return window.actionsLog");

Хотя в JS рабочий на 100%. C# тоже функционирует точно, передаёт всё как надо. Буду рад услышать замечания.

Сам код:

public async Task RecordActionsAsync(WebView2 webView)
{
    StartProcess();

    string script = @"
        (function() {
            window.actionsLog = window.actionsLog || [];
        
            function initLogger() {
                if (window.loggerInit) return;
                window.loggerInit = true;

                function logAction(type, data) {
                    var timeStamp = new Date().toISOString();
                    window.actionsLog.push({ type: type, data: data, time: timeStamp });
                }

                // Отслеживание кликов
                document.addEventListener('click', function(event) {
                    var element = event.target;
                    logAction('click', element.tagName + ' - ' + element.outerHTML);
                }, true);

                // Отслеживание ввода текста
                document.addEventListener('input', function(event) {
                    var element = event.target;
                    if (element.isContentEditable) {
                        logAction('input', element.tagName + ' (contenteditable) - ' + element.outerHTML + ' | Content: ' + element.innerHTML);
                    } else {
                        logAction('input', element.tagName + ' (' + (element.type || 'N/A') + ') - ' + element.outerHTML + ' | Value: ' + element.value);
                    }
                }, true);

                // Отслеживание изменения URL
                function logUrlChange() {
                    logAction('urlChange', window.location.href);
                }

                window.addEventListener('popstate', logUrlChange);
                window.addEventListener('hashchange', logUrlChange);
            
                // Переопределение методов pushState и replaceState для их отслеживания
                (function(history) {
                    logUrlChange(); // лог первого URL
                    var pushState = history.pushState;
                    var replaceState = history.replaceState;
                    history.pushState = function() {
                        var result = pushState.apply(history, arguments);
                        logUrlChange();
                        return result;
                    };
                    history.replaceState = function() {
                        var result = replaceState.apply(history, arguments);
                        logUrlChange();
                        return result;
                    };
                })(window.history);
            }

            // Begin initial logger
            initLogger();
        })();
    ";

    await webView.CoreWebView2.ExecuteScriptAsync(script);

    // Ожидание отмены
    try
    {
        await WaitForCancellationAsync(_cts.Token);
    }
    catch (TaskCanceledException)
    {
        // Процесс был отменен
    }
    
    GetActionsAsync(webView);

}

private async Task<List<Action>> GetActionsAsync(WebView2 webView)
{
    string result = await webView.CoreWebView2.ExecuteScriptAsync("return window.actionsLog"); // ПРОБЛЕМА
    // Далее парсинг
}

public async Task FinishRecordActionsAsync(WebView2 webView)
{
    StopProcess();
}

private void StartProcess()
{
    // Создаем новый CancellationTokenSource для управления процессом
    _cts = new CancellationTokenSource();
}

private void StopProcess()
{
    // Останавливаем процесс, отменяя токен
    _cts?.Cancel();
    _cts = null;
}
private async Task WaitForCancellationAsync(CancellationToken token)
{
    // Этот метод будет завершен, когда токен будет отменен
    var tcs = new TaskCompletionSource();
    using (token.Register(s => ((TaskCompletionSource)s).SetResult(), tcs))
    {
        await tcs.Task;
    }
}

Ответы (1 шт):

Автор решения: Qwertiy
string result = await webView.CoreWebView2.ExecuteScriptAsync("return window.actionsLog");

Из документации:

If the script that was run throws an unhandled exception, then the result is also null.

Скорее всего надо

string result = await webView.CoreWebView2.ExecuteScriptAsync("window.actionsLog");
→ Ссылка