gpt4 book ai didi

c# - 使用 CefSharp 等待页面加载

转载 作者:太空狗 更新时间:2023-10-29 20:23:03 31 4
gpt4 key购买 nike

首先,我是 C# 的新手,并且在学习 Cefsharp + javascript 的过程中,所以请尝试评论您认为有必要的任何解决方案,这样我就不会问愚蠢的问题了。

我试图等到页面用 Cefsharp 完成加载来执行我的代码,我已经尝试了在其他 stackoverflow 问题/github 上找到的几种解决方案,但没有成功。

我认为解决方案是“NavStateChanged”,但我收到以下 C# 错误:“ChromiumWebBrowser 不包含‘NavStateChanged’的定义”

谁能指出我正确的方向或给我一个片段?我并不是要你为我写完整的东西,但我真的迷失在这里,我同时学习了 C#、Cefsharp 和 javascript,嗯......它势不可挡。

这是我在网上寻找解决方案时找到的代码,它也匹配了很多github引用但似乎不起作用:/

EventHandler<NavStateChangedEventArgs> handler = null;
handler = (sender, args) = > {

//TODO : show a loading gif until the page load completes

//Wait for while page to finish loading not just the first frame
if (!args.IsLoading)
{
chromeBrowser.NavStateChanged -= handler;

MessageBox.Show("The page has completed loading", "Load completed",
MessageBoxButtons.OK);
//TODO : once load complete show the actual page
}

最佳答案

对于其他想知道我所做的同样事情的人:是的,它们已经过时了,感谢 amaitland 的链接!

https://github.com/cefsharp/CefSharp/wiki/General-Usage#handlers

这些似乎是与我相关的所有 3 个正确的加载状态:

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');");
}
}

//Wait for the MainFrame to finish loading
browser.FrameLoadEnd += (sender, args) =>
{
//Wait for the MainFrame to finish loading
if(args.Frame.IsMain)
{
args.Frame.ExecuteJavaScriptAsync("alert('MainFrame finished loading');");
}
};

关于c# - 使用 CefSharp 等待页面加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43461640/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com