DocumentCompleted多次触发 - 接受的StackOverflow回答不起作用

时间:2013-08-19 19:45:18

标签: c# url browser webbrowser-control

我测试我的WebBrowser是否已完成:

webBrowser2.DocumentCompleted += (s, e) =>
{
    // Do stuff  
}

我访问的网页是大量的JS文件和iframe和东西,所以我使用下面的函数来确保它是完成加载的实际页面。

webBrowser2.DocumentCompleted += (s, e) =>
{
    if (e.Url.AbsolutePath != (s as WebBrowser).Url.AbsolutePath)
    {
        return;
    }       
    // Do stuff    
}   

然而,它似乎仍然无效。我做错了什么,或者这在语法上是否正确?我的代码中还有其他错误?

3 个答案:

答案 0 :(得分:7)

我用这个(从SO的回答到类似的问题):

void BrowserDocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    if (e.Url.AbsolutePath != (sender as WebBrowser).Url.AbsolutePath)
        return; 

    //The page has finished loading.
}

答案 1 :(得分:5)

由于多种原因(frame,ajax等),

DocumentComplete可能会被多次触发。同时,对于特定文档,window.onload事件将仅被触发一次。所以,也许,你可以在window.onload上进行处理。我刚回答related question如何做到这一点。

答案 2 :(得分:1)

只需检查e.Url.AbsolutePath是您导航到的实际网址。

if(e.Url.AbsolutePath == TheActualURLString)    {       //这是您的实际页面下载完成    }