gpt4 book ai didi

c# - WebBrowser DocumentCompleted 事件被触发不止一次

转载 作者:太空狗 更新时间:2023-10-29 18:01:57 25 4
gpt4 key购买 nike

我一直在研究这个东西,似乎每个人都同意解决方案是检查 Web 浏览器的 ReadyState 直到设置为 Complete。

但实际上,有时会多次将 ReadyState 设置为 Complete 来触发该事件。

我不认为有针对那个糟糕的 .NET WebBrowser 的解决方案,但如果我使用底层 DOM 组件,可能会有一个解决方案。

唯一的问题是,我不知道如何访问 WebBrowser 后面触发 DocumentCompleted 事件的 DOM 组件。

最佳答案

DocumentCompleted 将为网页中的每个框架触发。困难的方法是计算帧数,向您展示如何访问 DOM:

private int mFrameCount;

private void startNavigate(string url) {
mFrameCount = 0;
webBrowser1.Navigate(url);
}

private void DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) {
mFrameCount += 1;
bool done = true;
if (webBrowser1.Document != null) {
HtmlWindow win = webBrowser1.Document.Window;
if (win.Frames.Count > mFrameCount && win.Frames.Count > 0) done = false;
}
if (done) {
Console.WriteLine("Now it is really done");
}
}

最简单的方法是检查完成加载的 URL:

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
if (e.Url.Equals(webBrowser1.Url)) {
Console.WriteLine("Now it is really done");
}
}

关于c# - WebBrowser DocumentCompleted 事件被触发不止一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3239204/

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