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 diff --git a/ExtendedWebView/Platforms/Android/Handlers/ExtWebViewHandler.cs b/ExtendedWebView/Platforms/Android/Handlers/ExtWebViewHandler.cs index 03fbfba..e163616 100644 --- a/ExtendedWebView/Platforms/Android/Handlers/ExtWebViewHandler.cs +++ b/ExtendedWebView/Platforms/Android/Handlers/ExtWebViewHandler.cs @@ -1,4 +1,6 @@ using Android.Graphics; +using AApp = Android.App; +using AOS = Android.OS; using AWebKit = Android.Webkit; using Java.Interop; @@ -36,8 +38,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 +151,35 @@ public void InvokeAction(string data) } } } + + public class MultiWindowWebChromeClient : AWebKit.WebChromeClient + { + 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; + newWebView.SetWebChromeClient(this); + + var transport = (AWebKit.WebView.WebViewTransport)resultMsg.Obj; + transport.WebView = newWebView; + resultMsg.SendToTarget(); + + _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; + } + }