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

waxmsbnn  于 2022-11-17  发布在  其他
关注(0)|答案(4)|浏览(1059)

我想知道是否有任何方法可以阻止webview 2组件在win窗体中打开浏览器窗口
发生了什么x1c 0d1x
我找遍了所有地方,但没有找到一个,我确实找到了一个,但它使用XAML/UWP
一个页面使用了xaml,但代码无法工作,因为它的XAML和im使用c#

ibrsph3r

ibrsph3r1#

要阻止链接在新窗口中打开,您可以订阅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控件)。

kkbh8khc

kkbh8khc2#

为了补充@Poul巴克的答案,我在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
xoefb8l8

xoefb8l83#

我尝试像保罗巴克上面提到的它为我工作,可能是你的活动订阅的地方可能是错误的,尝试像下面。
在CoreWebView 2初始化后订阅NewWindowRequested事件。
例如:

public Form1()
    {
        InitializeComponent();

        //https://learn.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;
    }

快乐编码...!!!

7vhp5slm

7vhp5slm4#

a good practice让您的应用程序可以像真实的的浏览器一样处理新的选项卡

相关问题