亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 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 關注
  • 521 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號