winforms 如何防止WebView2(基于边缘)打开新窗口

scyqe7ek  于 2022-11-17  发布在  其他
关注(0)|答案(3)|浏览(212)

在Webview2中打开新选项卡时,WindowsForms外部的新窗口打开。我想阻止打开此窗口,该如何操作?

tvz2xvvm

tvz2xvvm1#

你可以处理CoreWebView2.NewWindowRequested来决定新窗口

  • 要完全抑制弹出窗口,请设置e.Handled = true;
  • 要在同一窗口中显示弹出内容,请设置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://stackoverflow.com");
    await webView21.EnsureCoreWebView2Async();
    webView21.CoreWebView2.NewWindowRequested += CoreWebView2_NewWindowRequested;
}

private void CoreWebView2_NewWindowRequested(object sender,
    CoreWebView2NewWindowRequestedEventArgs e)
{
    e.NewWindow = (CoreWebView2)sender;
    //e.Handled = true;
}
8aqjt8rx

8aqjt8rx2#

为了补充@Reza的答案,我在VB .NET中遇到了这个确切的问题,但是所有的答案都是C#的,所以如果有人需要的话,我会把它贴在这里。
首先确保导入以下内容:

Imports Microsoft.Web.WebView2.Core
Imports Microsoft.Web.WebView2.WinForms

然后添加这2个事件,只是用Webview 2控件名替换wVBrowser。

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
lnvxswe2

lnvxswe23#

请注意注册*WebView.CoreWebView2.NewWindowRequested*事件的位置。
我尝试使用
Browser.Initialized
事件,在其中注册此事件处理程序,但该事件从未引发
我不得不使用Browser.CoreWebView2InitializationCompleted,现在一切正常一切正常

相关问题