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

在WPF中通过编程方式获取WebView2控件的UserAgent字符串

解决WPF无UI插件中获取WebView2 UserAgent的问题

方案一:手动初始化CoreWebView2环境(无需依赖UI生命周期)

在无UI插件场景下,无需将WebView2控件添加到可视化树,直接通过CoreWebView2Environment手动初始化CoreWebView2实例,绕过控件的UI相关生命周期限制:

private async Task<string> GetWebView2UserAgentAsync()
{
    // 创建CoreWebView2环境,默认自动查找Edge运行时,也可指定路径
    var env = await CoreWebView2Environment.CreateAsync();
    
    // 初始化CoreWebView2实例,不关联任何窗口句柄
    var coreWebView2 = await CoreWebView2.CreateCoreWebView2Async(null, env);
    
    // 直接执行脚本获取UserAgent
    var userAgentJson = await coreWebView2.ExecuteScriptAsync("navigator.userAgent");
    // 移除JSON字符串的首尾引号
    return userAgentJson.Trim('"');
}

关键说明

  • 此方法完全脱离UI可视化树运行,不需要等待Loaded或ContentRendered事件
  • CreateCoreWebView2Async第一个参数传null,表示不绑定任何窗口,适配无UI场景
  • CoreWebView2初始化完成后无需导航页面,可直接执行脚本获取UserAgent

方案二:同步获取方式(可选)

如果业务需要同步获取结果,可基于异步方法做阻塞处理(建议优先使用异步方式):

public string GetWebView2UserAgent()
{
    var envTask = CoreWebView2Environment.CreateAsync();
    envTask.Wait();
    
    var coreWebView2Task = CoreWebView2.CreateCoreWebView2Async(null, envTask.Result);
    coreWebView2Task.Wait();
    
    var userAgentTask = coreWebView2Task.Result.ExecuteScriptAsync("navigator.userAgent");
    userAgentTask.Wait();
    
    return userAgentTask.Result.Trim('"');
}

注意事项

  • 确保代码在**单线程公寓(STA)**环境运行,WPF插件默认多为STA线程,若为MTA线程需调整
  • 若Edge运行时查找失败,可在CreateCoreWebView2EnvironmentAsync中指定具体安装路径,示例:
    var env = await CoreWebView2Environment.CreateAsync(@"C:\Program Files (x86)\Microsoft\Edge\Application\120.0.2210.91");
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 14:35:07