为了账号安全,请及时绑定邮箱和手机立即绑定

使用 CefSharp 检测 URL 更改

使用 CefSharp 检测 URL 更改

C#
扬帆大鱼 2023-05-14 16:47:30
我正在创建一个使用 CefSharp 73.1.130 的软件。我需要在 URL 更改时或至少在页面加载时进行一些检查。我已经尝试了很多东西,例如:browser.RenderProcessMessageHandler = new RenderProcessMessageHandler();public class RenderProcessMessageHandler: IRenderProcessMessageHandler {    // Wait for the underlying `Javascript Context` to be created, this is only     called for the main frame.    // If the page has no javascript, no context will be created.    void IRenderProcessMessageHandler.OnContextCreated(IWebBrowser browserControl, IBrowser browser, IFrame frame) {        const string script = "document.addEventListener('DOMContentLoaded', function(){ alert('DomLoaded'); });";        frame.ExecuteJavaScriptAsync(script);    }}//Wait for the page to finish loading (all resources will have been loaded,     rendering is likely still happening)browser.LoadingStateChanged += (sender, args) => {    //Wait for the Page to finish loading    if (args.IsLoading == false) {        browser.ExecuteJavaScriptAsync("alert('All Resources Have Loaded');");    }}和这个 :    browser.LoadingStateChanged += OnLoadingStateChanged;private void OnLoadingStateChanged(object sender, LoadingStateChangedEventArgs args) {    if (!args.IsLoading) {        // Page has finished loading, do whatever you want here    }}但我不确定我是否正确使用它,所以我每次都会收到错误消息,例如“该名称在当前上下文中不存在”。这是我的 CefSharp 代码:    public CefSharp.WinForms.ChromiumWebBrowser browser;private void InitializeChromium() {    CefSettings settings = new CefSettings();    Cef.Initialize(settings);    browser = new CefSharp.WinForms.ChromiumWebBrowser("https://google.com/");    browser.Dock = DockStyle.Fill;    this.wb_panel.Controls.Add(browser);}我希望获得新的 url 作为输出以在 RichTextBox 中显示它
查看完整描述

1 回答

?
临摹微笑

TA贡献1982条经验 获得超2个赞

您可以ChromiumWebBrowser_AddressChanged在代码中使用事件。ChromiumWebBrowser.AddressChanged事件在图书馆网站上有描述。


这是你应该如何使用它:


订阅事件:


browser.AddressChanged += OnBrowserAddressChanged;


定义OnBrowserAddressChangedbody 到 changeRichBoxText值:


this.InvokeOnUiThreadIfRequired(() => richTextBox1.Text = e.Address);

完毕


这是完整的例子:


using CefSharp;

using CefSharp.WinForms;

using CefSharp.WinForms.Internals;


using System;

using System.Windows.Forms;


namespace WindowsFormsApp2

{

    public partial class Form1 : Form

    {

        private readonly ChromiumWebBrowser browser;

        public Form1()

        {

            InitializeComponent();


            browser = new ChromiumWebBrowser("www.google.com")

            {

                Dock = DockStyle.Fill,

            };



            browser.AddressChanged += OnBrowserAddressChanged;


            Controls.Add(browser);

        }


        private void OnBrowserAddressChanged(object sender, AddressChangedEventArgs e)

        {

            this.InvokeOnUiThreadIfRequired(() => Text = e.Address);

        }

    }

}


查看完整回答
反对 回复 2023-05-14
  • 1 回答
  • 0 关注
  • 316 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信