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;
}
}