You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止WebView2中点击登录按钮后弹出新Edge窗口?

解决WebView2(VB.NET)阻止弹出新Edge窗口的问题

错误原因

你之前的代码错误是因为VB.NET绑定事件的语法和C#不同,C#用+=,VB.NET必须使用AddHandler语句来绑定事件,直接用+=会触发事件调用的语法错误。

修正后的完整代码

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

Public Class Form1

    Private Async Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        MyBase.OnLoad(e)
        ' 绑定CoreWebView2初始化完成事件
        AddHandler WebView21.CoreWebView2InitializationCompleted, AddressOf OnCoreWebView2InitializationCompleted
        
        ' 初始化CoreWebView2环境
        Dim env = Await CoreWebView2Environment.CreateAsync(Nothing, Nothing, Nothing)
        Await WebView21.EnsureCoreWebView2Async(env)
        
        ' 加载目标网页
        WebView21.Source = New Uri("https://www.somesite.com")
    End Sub

    Private Sub OnCoreWebView2InitializationCompleted(ByVal sender As Object, ByVal e As CoreWebView2InitializationCompletedEventArgs)
        ' 检查初始化是否成功,避免空引用
        If e.IsSuccess Then
            ' 绑定新窗口请求事件
            AddHandler WebView21.CoreWebView2.NewWindowRequested, AddressOf OnNewWindowRequested
        End If
    End Sub

    Private Sub OnNewWindowRequested(ByVal sender As Object, ByVal e As CoreWebView2NewWindowRequestedEventArgs)
        ' 标记该请求已被处理,阻止弹出新窗口
        e.Handled = True
        ' 在当前WebView2控件中打开目标URL
        WebView21.CoreWebView2.Navigate(e.Uri)
    End Sub
End Class

关键说明

  1. 事件绑定修正:所有事件绑定都改用AddHandler语句,这是VB.NET的标准事件绑定方式。
  2. 初始化检查:在绑定NewWindowRequested事件前,先通过e.IsSuccess确认CoreWebView2初始化成功,避免出现空引用异常。
  3. 请求处理逻辑:
    • 设置e.Handled = True:告诉WebView2该新窗口请求已被自定义处理,不再弹出默认的Edge窗口。
    • 调用Navigate(e.Uri):将原本要在新窗口打开的URL加载到当前WebView2控件中。

针对“无响应”情况的排查

如果之前的方案代码无报错但点击登录无反应,可能是以下原因:

  • 事件未成功绑定:检查CoreWebView2是否初始化成功,确保AddHandler语句在EnsureCoreWebView2Async完成后执行。
  • URL获取异常:部分网站的新窗口请求可能通过e.NewWindow传递而非e.Uri,可以尝试替换导航逻辑为:
    ' 如果e.Uri为空,尝试通过NewWindow属性处理
    If Not String.IsNullOrEmpty(e.Uri) Then
        WebView21.CoreWebView2.Navigate(e.Uri)
    ElseIf e.NewWindow IsNot Nothing Then
        AddHandler e.NewWindow.NavigationCompleted, Sub(s, args)
                                                        WebView21.CoreWebView2.Navigate(args.Uri.ToString())
                                                    End Sub
    End If
    
  • 网站的登录按钮使用了特殊的弹窗逻辑:可以尝试启用WebView2的AllowSingleSignOnUsingOSPrimaryAccount设置,或者检查网站的弹窗触发方式是否需要额外处理。

内容的提问来源于stack exchange,提问作者Mattia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 16:20:37