如何阻止 webview2 打开新浏览器 window 而不是在浏览器内部

How to stop webview2 from opening new browser window rather than inside the browser

我想知道是否有办法阻止 webview2 组件打开浏览器 window 在胜利形式

发生了什么

我到处找都没有找到,虽然我找到了,但是它使用了XAML/UWP

一页使用了 xaml 但代码无法工作,因为它 XAML 而我使用的是 c#

要阻止 link 在新的 window 中打开,您已订阅 CoreWebView2_NewWindowRequested

要做到这一点,最简单的方法是先订阅 CoreWebView2InitializationCompleted

WebView2 控件的属性 window 中,双击 CoreWebView2InitializationCompleted - 这将自动生成事件处理程序:

现在添加 CoreWebView2_NewWindowRequested 事件处理程序并将 e.NewWindow 设置为当前的 CoreWebView2

这是代码(假设您的 WebView2 控件被称为 webView21):

private void WebView21_CoreWebView2InitializationCompleted(object sender, Microsoft.Web.WebView2.Core.CoreWebView2InitializationCompletedEventArgs e)
{
    webView21.CoreWebView2.NewWindowRequested += CoreWebView2_NewWindowRequested;
}

private void CoreWebView2_NewWindowRequested(object sender, Microsoft.Web.WebView2.Core.CoreWebView2NewWindowRequestedEventArgs e)
{
    e.NewWindow = webView21.CoreWebView2;
}

现在 link 在同一个 window(您的 WebView2 控件)中打开。

我试过像上面提到的 Poul Bak 对我有用,可能是你的活动订阅地点有误,试试下面的方法。

在 CoreWebView2 初始化后订阅 NewWindowRequested 事件。

例如:

 public Form1()
    {
        InitializeComponent();

        //https://docs.microsoft.com/en-us/microsoft-edge/webview2/get-started/winforms
        InitializeAsync();
     
    }

    async void InitializeAsync()
    {
        await webView.EnsureCoreWebView2Async(null);
        webView.CoreWebView2.NewWindowRequested += CoreWebView2_NewWindowRequested;
    }

private void CoreWebView2_NewWindowRequested(object sender, CoreWebView2NewWindowRequestedEventArgs e)
    {
        e.NewWindow = webView.CoreWebView2;
    }

快乐编码...!!!!

为了补充@Poul Bak 的回答,我在 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