// WebViewPage - Main page demonstrating WebView with WebKitGTK using Microsoft.Maui.Controls; namespace WebViewDemo; public partial class WebViewPage : ContentPage { public WebViewPage() { Console.WriteLine("[WebViewPage] Constructor starting"); InitializeComponent(); // Set initial URL MainWebView.Source = new UrlWebViewSource { Url = "https://dotnet.microsoft.com" }; Console.WriteLine("[WebViewPage] Constructor finished"); } private void OnBackClicked(object? sender, EventArgs e) { Console.WriteLine("[WebViewPage] Back button clicked"); if (MainWebView.CanGoBack) { MainWebView.GoBack(); } } private void OnForwardClicked(object? sender, EventArgs e) { Console.WriteLine("[WebViewPage] Forward button clicked"); if (MainWebView.CanGoForward) { MainWebView.GoForward(); } } private void OnReloadClicked(object? sender, EventArgs e) { Console.WriteLine("[WebViewPage] Reload button clicked"); MainWebView.Reload(); } private void OnGoClicked(object? sender, EventArgs e) { Navigate(); } private void OnUrlSubmitted(object? sender, EventArgs e) { Navigate(); } private void Navigate() { var url = UrlEntry.Text?.Trim(); if (string.IsNullOrEmpty(url)) return; // Add https:// if not present if (!url.StartsWith("http://") && !url.StartsWith("https://")) url = "https://" + url; Console.WriteLine($"[WebViewPage] Navigating to: {url}"); MainWebView.Source = new UrlWebViewSource { Url = url }; UrlEntry.Text = url; } private void OnNavigating(object? sender, WebNavigatingEventArgs e) { StatusLabel.Text = $"Loading: {e.Url}"; Console.WriteLine($"[WebViewPage] Navigating to: {e.Url}"); } private void OnNavigated(object? sender, WebNavigatedEventArgs e) { StatusLabel.Text = e.Result == WebNavigationResult.Success ? $"Loaded: {e.Url}" : $"Failed: {e.Result}"; UrlEntry.Text = e.Url; Console.WriteLine($"[WebViewPage] Navigated: {e.Result} - {e.Url}"); } private void OnLoadHtmlClicked(object? sender, EventArgs e) { Console.WriteLine("[WebViewPage] Load HTML button clicked"); var html = @" OpenMaui WebView

Hello from OpenMaui Linux!

This HTML content is rendered by WebKitGTK inside your .NET MAUI application.

WebView Features:

Powered by WebKitGTK - the same engine used by GNOME Web (Epiphany)

"; MainWebView.Source = new HtmlWebViewSource { Html = html }; StatusLabel.Text = "Loaded custom HTML"; } private async void OnEvalJsClicked(object? sender, EventArgs e) { Console.WriteLine("[WebViewPage] Run JS button clicked"); try { var result = await MainWebView.EvaluateJavaScriptAsync("document.title"); StatusLabel.Text = $"JS Result: {result ?? "(null)"}"; Console.WriteLine($"[WebViewPage] JS Eval result: {result}"); } catch (Exception ex) { StatusLabel.Text = $"JS Error: {ex.Message}"; Console.WriteLine($"[WebViewPage] JS Error: {ex.Message}"); } } }