如何确定网页在Web浏览器中是否完全加载?

4

我正在开发一个基于HTML的用户界面的Windows窗体应用程序。我需要知道网页何时完全加载完成。我已经尝试了许多Web浏览器事件,如DocumentCompleted、IsBusy和ReadyState,但没有一个能够像我期望的那样响应。


你期望得到什么,你又得到了什么? - Softnux
我需要一个事件,当HTML页面完全加载完成时触发。 - Hamed Moayeri
你尝试过onload事件了吗?发生了什么事情? - Pete Wilson
.NET平台上的webBrowser没有onload事件。 - Hamed Moayeri
2个回答

3

如果您能使用jQuery库,那么它就非常简单。

$(document).ready() {
    //your page is fully loaded
};

否则,您将不得不依赖于基于您所使用的浏览器的不同方法。由于这是一个Windows表单应用程序,我假设您正在使用基于IE的呈现引擎。如果是这样,那么以下方法可能适合您:
if (document.attachEvent)
{
 document.attachEvent("onreadystatechange", function()
 {
      if (document.readyState === "complete")
      {
           document.detachEvent("onreadystatechange",
                arguments.callee);
           /* code to run on load */
      }
 });
}

如果你感兴趣的话,可以在这里找到其他依赖于不同浏览器的解决方案: http://dean.edwards.name/weblog/2006/06/again/


我不能在我的项目中使用jQuery库。有什么方法可以完成它吗? - Hamed Moayeri
就像我所说的,如果你不能使用jQuery,那么你将不得不使用其中一个依赖于浏览器且不依赖于类库(如jQuery)的解决方案。 - sngregory

0
Chamika Sandamal是正确的 - 你应该使用DocumentComplete事件,但是要检查'sender'对象。最后一个'complete'事件来自于'browser'对象本身,而不是从加载图片、文本等触发它的元素。在页面上的所有元素都触发DocumentComelete事件之后,最后一个事件将来自于浏览器本身。如果你可以将'sender'转换为浏览器对象 - 就是浏览器加载完成事件。只需注意,在HTML中如果有任何'frame'标签,它们将在浏览器完成事件后引发不同的DcoumentComplete事件。我认为'frame'被视为另一个HTML页面,因此它将具有自己的'complete'事件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接