Windows Forms中WebView2打开资源管理器后空白窗口如何关闭?
WebView2点击search-ms链接后残留空白窗口的解决办法
问题原因
点击带有target="_blank"的search-ms协议链接时,WebView2会尝试创建新窗口加载该协议,但search-ms是系统资源管理器专属协议,无法在WebView2窗口中解析加载,导致新窗口变成空白的about:blank页面残留。
解决方法
方法一:拦截新窗口创建事件(推荐,无需修改网页)
通过监听WebView2的CoreWebView2.NewWindowRequested事件,拦截search-ms协议的新窗口请求,直接调用系统默认程序打开资源,同时取消默认的新窗口创建行为。
C#示例代码:
private void WebView2_CoreWebView2InitializationCompleted(object sender, CoreWebView2InitializationCompletedEventArgs e) { if (e.IsSuccess) { webView2.CoreWebView2.NewWindowRequested += CoreWebView2_NewWindowRequested; } } private void CoreWebView2_NewWindowRequested(object sender, CoreWebView2NewWindowRequestedEventArgs e) { if (Uri.TryCreate(e.Uri, UriKind.Absolute, out var uri) && uri.Scheme.Equals("search-ms", StringComparison.OrdinalIgnoreCase)) { // 调用系统默认程序打开search-ms链接 System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(uri.AbsoluteUri) { UseShellExecute = true }); // 标记事件已处理,阻止创建新窗口 e.Handled = true; } }
方法二:修改网页链接属性(若有权限修改网页)
直接移除链接的target="_blank"属性,点击时WebView2会在当前窗口处理协议,完成后不会残留空白窗口。修改后的链接代码:
<a href="search-ms:crumb=&crumb=location:C:%5CUsers" title="" class="img-Lazy-warp">Open Users</a>
内容的提问来源于stack exchange,提问作者alwaysVBNET
相关产品推荐
相关产品推荐

