using System; using System.Threading.Tasks; namespace Wino.Mail.WinUI.Extensions; public static class WebViewExtensions { private static bool _environmentInitialized; /// /// Sets WebView2 environment variables once per process. /// Must be called before any WebView2 is initialized. /// public static void EnsureWebView2Environment() { if (_environmentInitialized) return; Environment.SetEnvironmentVariable("WEBVIEW2_DEFAULT_BACKGROUND_COLOR", "00FFFFFF"); Environment.SetEnvironmentVariable("WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS", "--enable-features=OverlayScrollbar,msOverlayScrollbarWinStyle,msOverlayScrollbarWinStyleAnimation,msWebView2CodeCache"); _environmentInitialized = true; } /// /// Executes a script function in the WebView2 control. /// /// Parameters should be serialized to json public static async Task ExecuteScriptFunctionAsync(this Microsoft.UI.Xaml.Controls.WebView2 Chromium, string functionName, params string[] parameters) { if (Chromium?.CoreWebView2 == null) return string.Empty; string script = functionName + "(" + string.Join(", ", parameters) + ");"; return await Chromium.ExecuteScriptAsync(script); } public static async Task ExecuteScriptFunctionSafeAsync(this Microsoft.UI.Xaml.Controls.WebView2 Chromium, string functionName, params string[] parameters) { if (Chromium == null) return string.Empty; try { return await Chromium.ExecuteScriptFunctionAsync(functionName, parameters: parameters); } catch { } return string.Empty; } public static async Task ExecuteScriptSafeAsync(this Microsoft.UI.Xaml.Controls.WebView2 Chromium, string script) { if (Chromium == null) return string.Empty; try { return await Chromium.ExecuteScriptAsync(script); } catch { } return string.Empty; } }