5

我想知道是否有阻止 webview2 组件以 win 形式打开浏览器窗口的方法

怎么了 在此处输入图像描述

我到处找,但找不到,但我确实找到了,但它使用了 XAML/UWP

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

4

3 回答 3

4

要阻止链接在新窗口中打开,请CoreWebView2_NewWindowRequested按照您的发现订阅。

为此,最简单的方法是订阅第CoreWebView2InitializationCompleted一个。

WebView2控件的属性窗口中,双击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;
}

现在链接在同一个窗口(您的WebView2控件)中打开。

于 2021-02-02T12:53:45.140 回答
1

为了补充@Poul Bak的答案,我在VB.Net中遇到了这个确切的问题,但所有答案都是针对C#的,所以如果其他人需要,我会在这里发布。

首先确保导入这个:

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
于 2021-08-12T21:41:54.743 回答
0

我尝试了上面提到的 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;
    }

快乐编码... !!!!

于 2021-07-20T19:55:02.990 回答