From 55b27866250e4378a8dccabbf042c251797bc7e1 Mon Sep 17 00:00:00 2001 From: Bastian Noffer Date: Sun, 23 Nov 2025 15:51:27 +0100 Subject: [PATCH 1/3] Add: Base MultiWindow support --- .../Android/Handlers/ExtWebViewHandler.cs | 30 ++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/ExtendedWebView/Platforms/Android/Handlers/ExtWebViewHandler.cs b/ExtendedWebView/Platforms/Android/Handlers/ExtWebViewHandler.cs index 03fbfba..6b9e583 100644 --- a/ExtendedWebView/Platforms/Android/Handlers/ExtWebViewHandler.cs +++ b/ExtendedWebView/Platforms/Android/Handlers/ExtWebViewHandler.cs @@ -1,4 +1,5 @@ using Android.Graphics; +using AOS = Android.OS; using AWebKit = Android.Webkit; using Java.Interop; @@ -36,8 +37,9 @@ protected override AWebKit.WebView CreatePlatformView() webView.Settings.JavaScriptEnabled = true; webView.Settings.DomStorageEnabled = true; - + webView.SetWebViewClient(new JavascriptWebViewClient($"javascript: {JavascriptFunction}", VirtualView)); + webView.SetWebChromeClient(new MultiWindowWebChromeClient()); // Multi-Window Unterstützung webView.AddJavascriptInterface(_jsBridgeHandler, "jsBridge"); if (Build.VERSION.SdkInt >= BuildVersionCodes.M) @@ -148,3 +150,29 @@ public void InvokeAction(string data) } } } + + public class MultiWindowWebChromeClient : AWebKit.WebChromeClient + { + public override bool OnCreateWindow(AWebKit.WebView view, bool isDialog, bool isUserGesture, + AOS.Message resultMsg) + { + var newWebView = new AWebKit.WebView(view.Context); + newWebView.Settings.JavaScriptEnabled = true; + newWebView.Settings.DomStorageEnabled = true; + + // Optional: Setze weitere Einstellungen oder Handler für das neue Fenster + + var transport = (AWebKit.WebView.WebViewTransport)resultMsg.Obj; + transport.WebView = newWebView; + resultMsg.SendToTarget(); + + // Zeige das neue Fenster an (z.B. in einem Dialog oder einer neuen Activity) + // Hier nur ein einfaches Beispiel: + Android.App.AlertDialog.Builder builder = new Android.App.AlertDialog.Builder(view.Context); + builder.SetView(newWebView); + builder.SetPositiveButton("Schließen", (sender, args) => newWebView.Destroy()); + builder.Show(); + + return true; + } + } From 2eb476cbcce8ad14f4c1e6b42d5cfaa31fb74f35 Mon Sep 17 00:00:00 2001 From: Bastian Noffer Date: Sun, 23 Nov 2025 15:57:41 +0100 Subject: [PATCH 2/3] Add: Support for closing Windows --- .../Android/Handlers/ExtWebViewHandler.cs | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/ExtendedWebView/Platforms/Android/Handlers/ExtWebViewHandler.cs b/ExtendedWebView/Platforms/Android/Handlers/ExtWebViewHandler.cs index 6b9e583..e163616 100644 --- a/ExtendedWebView/Platforms/Android/Handlers/ExtWebViewHandler.cs +++ b/ExtendedWebView/Platforms/Android/Handlers/ExtWebViewHandler.cs @@ -1,4 +1,5 @@ using Android.Graphics; +using AApp = Android.App; using AOS = Android.OS; using AWebKit = Android.Webkit; @@ -153,26 +154,32 @@ public void InvokeAction(string data) public class MultiWindowWebChromeClient : AWebKit.WebChromeClient { - public override bool OnCreateWindow(AWebKit.WebView view, bool isDialog, bool isUserGesture, - AOS.Message resultMsg) + private AApp.AlertDialog? _dialog; + + public override bool OnCreateWindow(AWebKit.WebView view, bool isDialog, bool isUserGesture, AOS.Message resultMsg) { var newWebView = new AWebKit.WebView(view.Context); newWebView.Settings.JavaScriptEnabled = true; newWebView.Settings.DomStorageEnabled = true; - - // Optional: Setze weitere Einstellungen oder Handler für das neue Fenster + newWebView.SetWebChromeClient(this); var transport = (AWebKit.WebView.WebViewTransport)resultMsg.Obj; transport.WebView = newWebView; resultMsg.SendToTarget(); - // Zeige das neue Fenster an (z.B. in einem Dialog oder einer neuen Activity) - // Hier nur ein einfaches Beispiel: - Android.App.AlertDialog.Builder builder = new Android.App.AlertDialog.Builder(view.Context); - builder.SetView(newWebView); - builder.SetPositiveButton("Schließen", (sender, args) => newWebView.Destroy()); - builder.Show(); + _dialog = new AApp.AlertDialog.Builder(view.Context) + .SetView(newWebView) + .SetPositiveButton("X", (sender, args) => newWebView.Destroy()) + .Create(); + _dialog.Show(); return true; } + + public override void OnCloseWindow(AWebKit.WebView window) + { + window.Destroy(); + _dialog?.Dismiss(); + _dialog = null; + } } From 6c094f57c6141ce6e0141446f5d71fed3765228f Mon Sep 17 00:00:00 2001 From: Bastian Noffer Date: Sun, 23 Nov 2025 16:02:54 +0100 Subject: [PATCH 3/3] Update: .NET MAUI dependencies Update: Package Information --- ExtendedWebView/ExtendedWebView.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ExtendedWebView/ExtendedWebView.csproj b/ExtendedWebView/ExtendedWebView.csproj index 6e70c6d..5fc0811 100644 --- a/ExtendedWebView/ExtendedWebView.csproj +++ b/ExtendedWebView/ExtendedWebView.csproj @@ -7,7 +7,7 @@ enable enable Com.Bnotech.ExtendedWebView - 9.0.90 + 9.0.120 12.2 13.1 @@ -23,7 +23,7 @@ bnotech BNO Technology Solutions e.K. This package provides support for a extended WebView - ©Copyright 2024, BNO Technology Solutions e.K. + ©Copyright 2025, BNO Technology Solutions e.K. WebView Extended ExtendedWebView README.md