Skip to content

WebView2 CDP Sync 示例 - 纯同步 CDP 调用

概述

CDP Sync 示例是 CDP 示例的简化版本,仅使用同步 CDP 调用模式。由于不需要处理事件回调,可以使用更简单的 Dim wv As New 声明方式。

项目结构

下载源码 [ 注意:重新到bin目录注册 DLL 文件 ]

代码请到 VBMAN2 项目 demos/webview2/cdpSync 目录获取。

cdpSync/
  ├── Form1.frm              # 主窗体,包含同步 CDP 调用
  ├── vbman2_webview2.vbp    # VB6 项目文件
  └── vbman2_webview2.vbw    # VB6 工作区文件

核心代码解析

1. 声明与初始化(Form1.frm)

vb
Dim wv As New cWebView2Host

Private Sub Form_Load()
    wv.Initialize Me.hWnd, "https://vb6.pro"
End Sub

注意:使用 Dim wv As New 自动实例化,同步模式不需要 WithEvents

2. 纯同步 CDP 调用

vb
Private Sub MenuSendCDP_Click()
    ' 依次执行多个同步 CDP 调用
    Dim sTitle As String
    sTitle = wv.CallDevToolsProtocolMethodSync( _
        "Runtime.evaluate", _
        "{""expression"":""document.title""}")
    Debug.Print "[Sync] Title -> " & sTitle
    
    Dim sCookies As String
    sCookies = wv.CallDevToolsProtocolMethodSync( _
        "Network.getCookies", _
        "{}")
    Debug.Print "[Sync] Cookies -> " & sCookies
    
    Dim sUrl As String
    sUrl = wv.CallDevToolsProtocolMethodSync( _
        "Runtime.evaluate", _
        "{""expression"":""document.URL""}")
    Debug.Print "[Sync] URL -> " & sUrl
    
    Dim sVersion As String
    sVersion = wv.CallDevToolsProtocolMethodSync( _
        "Browser.getVersion", _
        "{}")
    Debug.Print "[Sync] Version -> " & sVersion
    
    MsgBox "Title: " & sTitle, vbInformation, "CDP Sync Demo"
End Sub

功能说明

  1. 纯同步 CDP 调用

    • 所有 CallDevToolsProtocolMethodSync 调用阻塞等待结果
    • 返回值直接可用,无需事件处理
  2. 简化代码结构

    • 无需 WithEvents 声明
    • 无需事件处理函数
    • 代码逻辑线性流畅
  3. CDP 方法演示

    • Runtime.evaluate:执行 JS 并获取返回值
    • Network.getCookies:获取 Cookie 信息
    • Browser.getVersion:获取浏览器版本

技术要点

  1. 同步 vs 异步选择:同步调用更简单直接,但会阻塞当前线程。对于快速操作(毫秒级返回),同步模式更优
  2. 无需 WithEvents:同步模式下不使用事件回调,可使用 Dim wv As New 简化声明
  3. 顺序执行:多个同步调用按顺序执行,后一个调用在前一个完成后才开始

应用场景

  1. 快速获取页面信息(标题、URL、Cookie)
  2. 调试和诊断工具
  3. 不涉及耗时操作的简单 CDP 集成

扩展建议

  1. 如果需要执行耗时的 CDP 操作(如截图),请参考 cdp 示例改用异步模式
  2. 可以将常用的 CDP 调用封装为 VB6 辅助函数,简化重复代码

VB6及其LOGO版权为微软公司所有