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

如何在C# WinForms中获取CEF浏览器当前URL并显示到TextBox1

在C# WinForms中获取CEF浏览器当前URL并实时显示到TextBox

要实现每当CEF浏览器加载网页时,将当前URL显示到Form1的textBox1中,你可以按照以下步骤操作:

1. 确保项目已集成CEF

先确认你的WinForms项目已通过NuGet安装CefSharp.WinForms包(这是最常用的CEF.NET封装库)。

2. 订阅URL变化或页面加载完成事件

CEF提供了多个事件可监听URL状态,常用的有AddressChanged(URL一变化就触发)和FrameLoadEnd(页面加载完成后触发,适合需要确保页面加载完成的场景)。

示例代码(Form1.cs)

using CefSharp;
using CefSharp.WinForms;
using System;
using System.Windows.Forms;

namespace CefUrlDemo
{
    public partial class Form1 : Form
    {
        private ChromiumWebBrowser chromeBrowser;

        public Form1()
        {
            InitializeComponent();
            InitializeCefBrowser();
        }

        private void InitializeCefBrowser()
        {
            // 初始化CEF环境
            var settings = new CefSettings();
            Cef.Initialize(settings);

            // 创建CEF浏览器控件,初始加载谷歌首页
            chromeBrowser = new ChromiumWebBrowser("https://www.google.com");
            chromeBrowser.Dock = DockStyle.Fill;
            // 将浏览器控件添加到窗体
            this.Controls.Add(chromeBrowser);

            // 订阅AddressChanged事件:URL变化时立即更新TextBox
            chromeBrowser.AddressChanged += ChromeBrowser_AddressChanged;

            // 可选:订阅FrameLoadEnd事件,页面加载完成后更新(只处理主框架)
            // chromeBrowser.FrameLoadEnd += ChromeBrowser_FrameLoadEnd;
        }

        // AddressChanged事件处理方法
        private void ChromeBrowser_AddressChanged(object sender, AddressChangedEventArgs e)
        {
            // WinForms控件必须在UI线程更新,用Invoke切换线程避免异常
            this.Invoke((MethodInvoker)delegate
            {
                textBox1.Text = e.Address;
            });
        }

        // 可选:FrameLoadEnd事件处理方法
        private void ChromeBrowser_FrameLoadEnd(object sender, FrameLoadEndEventArgs e)
        {
            if (e.Frame.IsMain) // 仅处理主页面加载完成的情况
            {
                this.Invoke((MethodInvoker)delegate
                {
                    textBox1.Text = e.Url;
                });
            }
        }

        // 窗体关闭时销毁CEF环境
        protected override void OnFormClosing(FormClosingEventArgs e)
        {
            Cef.Shutdown();
            base.OnFormClosing(e);
        }
    }
}

关键说明

  • 线程安全:CEF的事件回调通常在非UI线程触发,必须使用Control.Invoke切换到UI线程更新控件,避免跨线程操作异常。
  • 事件选择:若要实时跟踪URL变化(比如用户在地址栏输入时),用AddressChanged;若需等待页面完全加载后再更新,用FrameLoadEnd并判断IsMain确保是主框架加载完成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 08:56:06