如何阻止 webview2 打开新的浏览器窗口而不是在浏览器内

问题描述

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

发生了什么

enter image description here

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

一个页面使用了 xaml 但代码不起作用,因为它的 XAML 和 im 使用 c#

解决方法

要停止在新窗口中打开链接,您订阅了 CoreWebView2_NewWindowRequested,如您所见。

为此,最简单的方法是先订阅 CoreWebView2InitializationCompleted

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

Properties windows

现在您添加 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;
}

现在链接在同一窗口中打开(您的 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;
    }

快乐编码...... !!!!