如何防止WebView2(Edge based)打开一个新的window
How to prevent WebView2(Edge based) to open a new window
当我打开一个新选项卡时,在 Webview2 内部,一个新的 window 在 WindowsForms 外部打开。我想阻止此 window 打开,我该怎么做?
您可以处理 CoreWebView2.NewWindowRequested 来决定新的 window
- 要完全禁止弹出窗口,请设置
e.Handled = true;
- 要在同一 window 中显示弹出内容,请设置
e.NewWindow = (CoreWebView2)sender;
- 要在另一个特定实例中打开,请将
e.NewWindow
设置为另一个 CoreWebView2
实例。
例如:
//using Microsoft.Web.WebView2.Core;
//using Microsoft.Web.WebView2.WinForms;
WebView2 webView21 = new WebView2();
private async void Form1_Load(object sender, EventArgs e)
{
webView21.Dock = DockStyle.Fill;
this.Controls.Add(webView21);
webView21.Source = new Uri("Https://whosebug.com");
await webView21.EnsureCoreWebView2Async();
webView21.CoreWebView2.NewWindowRequested += CoreWebView2_NewWindowRequested;
}
private void CoreWebView2_NewWindowRequested(object sender,
CoreWebView2NewWindowRequestedEventArgs e)
{
e.NewWindow = (CoreWebView2)sender;
//e.Handled = true;
}
为了补充@Reza 的回答,我在 VB.Net 中遇到了这个确切的问题,但所有答案都是针对 C# 的,所以如果其他人需要它,我将在 post 中找到它。
首先确保导入这个:
Imports Microsoft.Web.WebView2.Core
Imports Microsoft.Web.WebView2.WinForms
然后添加这 2 个事件,只需将 wVBrowser 替换为您的 Webview2 控件名称即可。
Private Sub wVBrowser_CoreWebView2InitializationCompleted(sender As Object, e As CoreWebView2InitializationCompletedEventArgs) Handles wVBrowser.CoreWebView2InitializationCompleted
AddHandler wVBrowser.CoreWebView2.NewWindowRequested, AddressOf CoreWebView2_NewWindowRequested
End Sub
Private Sub CoreWebView2_NewWindowRequested(ByVal sender As Object, ByVal e As Microsoft.Web.WebView2.Core.CoreWebView2NewWindowRequestedEventArgs)
e.Handled = True
End Sub
请注意注册 WebView 的位置。CoreWebView2.NewWindowRequested 事件..
我尝试使用 Browser.Initialized 事件,我会在其中注册此事件处理程序,但该事件 从未引发 .
我不得不使用 Browser.CoreWebView2InitializationCompleted 现在一切正常 很好..
当我打开一个新选项卡时,在 Webview2 内部,一个新的 window 在 WindowsForms 外部打开。我想阻止此 window 打开,我该怎么做?
您可以处理 CoreWebView2.NewWindowRequested 来决定新的 window
- 要完全禁止弹出窗口,请设置
e.Handled = true;
- 要在同一 window 中显示弹出内容,请设置
e.NewWindow = (CoreWebView2)sender;
- 要在另一个特定实例中打开,请将
e.NewWindow
设置为另一个CoreWebView2
实例。
例如:
//using Microsoft.Web.WebView2.Core;
//using Microsoft.Web.WebView2.WinForms;
WebView2 webView21 = new WebView2();
private async void Form1_Load(object sender, EventArgs e)
{
webView21.Dock = DockStyle.Fill;
this.Controls.Add(webView21);
webView21.Source = new Uri("Https://whosebug.com");
await webView21.EnsureCoreWebView2Async();
webView21.CoreWebView2.NewWindowRequested += CoreWebView2_NewWindowRequested;
}
private void CoreWebView2_NewWindowRequested(object sender,
CoreWebView2NewWindowRequestedEventArgs e)
{
e.NewWindow = (CoreWebView2)sender;
//e.Handled = true;
}
为了补充@Reza 的回答,我在 VB.Net 中遇到了这个确切的问题,但所有答案都是针对 C# 的,所以如果其他人需要它,我将在 post 中找到它。
首先确保导入这个:
Imports Microsoft.Web.WebView2.Core
Imports Microsoft.Web.WebView2.WinForms
然后添加这 2 个事件,只需将 wVBrowser 替换为您的 Webview2 控件名称即可。
Private Sub wVBrowser_CoreWebView2InitializationCompleted(sender As Object, e As CoreWebView2InitializationCompletedEventArgs) Handles wVBrowser.CoreWebView2InitializationCompleted
AddHandler wVBrowser.CoreWebView2.NewWindowRequested, AddressOf CoreWebView2_NewWindowRequested
End Sub
Private Sub CoreWebView2_NewWindowRequested(ByVal sender As Object, ByVal e As Microsoft.Web.WebView2.Core.CoreWebView2NewWindowRequestedEventArgs)
e.Handled = True
End Sub
请注意注册 WebView 的位置。CoreWebView2.NewWindowRequested 事件..
我尝试使用 Browser.Initialized 事件,我会在其中注册此事件处理程序,但该事件 从未引发 .
我不得不使用 Browser.CoreWebView2InitializationCompleted 现在一切正常 很好..