HTML - 如何知道何时加载所有帧?

Yuv*_*led 11 html c# browser mshtml

我正在使用.NET WebBrowser控件.我怎么知道网页何时满载?

我想知道浏览器什么时候不提取任何数据.(当IE在状态栏中写'完成'时......).

笔记:

  • 对于包含多个框架的网站,DocumentComplete/NavigateComplete事件可能会多次发生.
  • 浏览器就绪状态也没有解决问题.
  • 我已经尝试检查帧集合中的帧数,然后计算我获得DocumentComplete事件的次数,但这也不起作用.
  • this.WebBrowser.IsBusy也不起作用.在文档完成处理程序中检查它时总是"假".

Yuv*_*led 0

这最终对我有用:

       public bool WebPageLoaded
    {
        get
        {
            if (this.WebBrowser.ReadyState != System.Windows.Forms.WebBrowserReadyState.Complete)
                return false;

            if (this.HtmlDomDocument == null)
                return false;

            // iterate over all the Html elements. Find all frame elements and check their ready state
            foreach (IHTMLDOMNode node in this.HtmlDomDocument.all)
            {
                IHTMLFrameBase2 frame = node as IHTMLFrameBase2;
                if (frame != null)
                {
                    if (!frame.readyState.Equals("complete", StringComparison.OrdinalIgnoreCase))
                        return false;

                }
            }

            Debug.Print(this.Name + " - I think it's loaded");
            return true;
        }
    }
Run Code Online (Sandbox Code Playgroud)

在每个文档完成事件中,我都会运行所有 html 元素并检查所有可用的框架(我知道它可以优化)。对于每一帧,我检查其就绪状态。它非常可靠,但就像 jeffamaphone 所说的那样,我已经看到触发一些内部刷新的网站。但上面的代码已经满足我的需求了。

编辑:每个帧都可以包含其中的帧,因此我认为应该更新此代码以递归地检查每个帧的状态。