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

VSTO插件中WebView2按钮启动空白页问题求助

问题解决:VSTO插件中WebView2空白页面无法加载的修复

问题根源

  1. 事件绑定时机错误:原代码在await webView.EnsureCoreWebView2Async(env)之后才绑定CoreWebView2InitializationCompleted事件,此时WebView2初始化已完成,事件已触发过,导致无法收到回调。
  2. 异步初始化时机不当:在UserControl构造函数中直接调用async void方法,控件生命周期未完全就绪,可能引发异步操作异常或未执行完成。

修复后的代码

BrowserUserControl.cs 完整代码

using Microsoft.Web.WebView2.Core;
using System;
using System.Windows.Forms;
using Microsoft.Web.WebView2.WinForms;
using System.Diagnostics;

namespace My_Addin
{
    public partial class BrowserUserControl : UserControl
    {
        private WebView2 webView;

        public BrowserUserControl()
        {
            InitializeComponent();
            // 绑定控件加载事件,确保控件初始化完成后再启动WebView2初始化
            this.Load += BrowserUserControl_Load;
        }

        private async void BrowserUserControl_Load(object sender, EventArgs e)
        {
            await InitializeAsync();
        }

        private void WebView_NavigationStarting(object sender, CoreWebView2NavigationStartingEventArgs e)
        {
            Debug.WriteLine("inside WebView_NavigationStarting");
        }

        private async Task InitializeAsync()
        {
            try
            {
                // 创建WebView2环境,使用默认Edge运行时,指定用户数据目录
                var env = await CoreWebView2Environment.CreateAsync(
                    browserExecutableFolder: null,
                    userDataFolder: @"C:\Users\softtimur\VSTO");
                Debug.WriteLine("inside InitializeAsync 1");

                webView = new WebView2
                {
                    Dock = DockStyle.Fill,
                };

                // 先绑定所有事件,再执行初始化操作
                webView.CoreWebView2InitializationCompleted += WebView_CoreWebView2InitializationCompleted;
                webView.NavigationStarting += WebView_NavigationStarting;

                Controls.Add(webView);

                await webView.EnsureCoreWebView2Async(env);
                Debug.WriteLine("inside InitializeAsync 2");
            }
            catch (Exception ex)
            {
                Debug.WriteLine($"Initialization failed with exception: {ex}");
                MessageBox.Show($"WebView2初始化失败: {ex.Message}");
            }
        }

        private void WebView_CoreWebView2InitializationCompleted(object sender, CoreWebView2InitializationCompletedEventArgs e)
        {
            Debug.WriteLine("inside WebView_CoreWebView2InitializationCompleted 1");
            if (e.IsSuccess)
            {
                Debug.WriteLine("inside WebView_CoreWebView2InitializationCompleted 2");
                webView.CoreWebView2.Navigate("https://www.google.fr");
            }
            else
            {
                MessageBox.Show($"WebView2初始化失败. 错误: {e.InitializationException.Message}");
            }
        }
    }
}

按钮点击事件代码(可保留原逻辑)

private void button2_Click(object sender, RibbonControlEventArgs e)
{    
    using (var form = new Form())
    {
        form.Controls.Add(new BrowserUserControl { Dock = DockStyle.Fill });
        form.ShowDialog();
    }
}

额外注意事项

  • 确保已安装Microsoft Edge WebView2 Runtime,可通过Edge浏览器自带的运行时,或手动部署到插件目录。
  • 如果使用自定义运行时路径,需在CoreWebView2Environment.CreateAsync的browserExecutableFolder参数中指定Edge运行时的exe路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 16:45:18