I use Web View in MAUI in my .net application. When user click on the link with middle mouse button (or regular click with shift pressed) a new window is pop up.
And this is want I want to prevent. I need my custom action on this event.
What I tried :
Edit : I Tried to catch middle mouse lick with in low level style with OnPlatformMessage in ConfigureLifecycleEvents but failed
I solved this Issues like this :
Create custom WebView like that:
#if WINDOWS
public class CustomWebView : WebView
{
... code
}
#else
public class CustomWebView : WebView
{
}
#endif
Than I put this methods inside to catch tapped event :
protected override void OnHandlerChanged()
{
base.OnHandlerChanged();
// Check if the handler is available and it is a specific platform handler
if (Handler?.PlatformView is WebView2 webView)
{
webView.Tapped += WebView_Tapped;
webView.NavigationStarting += WebView_NavigationStarting; ;
}
}
In tapped I get CoreWebView2 and add handler on newWindowRequested event like this :
private void WebView_Tapped(object sender, Microsoft.UI.Xaml.Input.TappedRoutedEventArgs e)
{
WebView2 senderWebView = sender as WebView2;
// Unsubscribe the event handler if it's already subscribed
senderWebView.CoreWebView2.NewWindowRequested -= CoreWebView2_NewWindowRequested;
// sucbscribe
senderWebView.CoreWebView2.NewWindowRequested += CoreWebView2_NewWindowRequested;
}
Than I handle new window requested to disallow new window to pop Up by marking requested as handled and raise event to handle this action with my logic instead of aperaing new WebView window :
private void CoreWebView2_NewWindowRequested(Microsoft.Web.WebView2.Core.CoreWebView2 sender, Microsoft.Web.WebView2.Core.CoreWebView2NewWindowRequestedEventArgs args)
{
// Create an event argument object to pass data to the event handler
var eventArgs = args.Uri;
// Raise the custom event
OnNewWindowRequested(eventArgs);
args.Handled = true;
return;
}