通过HtmlDocument.All集合的迭代在引用的样式表处停止?

时间:2010-03-19 12:28:59

标签: c# html webbrowser-control

由于“.NET中的bug”通常不是问题的真正原因,我想知道我是否在这里遗漏了一些东西。

我正在做的事情很简单。我正在迭代HtmlDocument中名为doc的元素,如下所示:

System.Diagnostics.Debug.WriteLine("*** " + doc.Url + " ***");
foreach (HtmlElement field in doc.All)
    System.Diagnostics.Debug.WriteLine(string.Format("Tag = {0}, ID = {1} ", field.TagName, field.Id));

然后我发现调试窗口输出是这样的:

Tag = !, ID =  
Tag = HTML, ID =  
Tag = HEAD, ID =  
Tag = TITLE, ID =  
Tag = LINK, ID =  

...当实际的HTML文档如下所示:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
    <head>
        <title>Protocol</title>
        <link rel="Stylesheet" type="text/css" media="all" href="ProtocolStyle.css">
    </head>
    <body onselectstart="return false">
        <table>
            <!-- Misc. table elements and cell values -->
        </table>
    </body>
</html>

注释掉LINK标记可以解决我的问题,并且文档已完全解析。 ProtocolStyle.css文件存在于磁盘上并正确加载,如果这很重要的话。这是.NET 3.5 SP1中的错误,还是什么?对于这样一个面向Web的框架,我发现很难相信它会有这么大的错误。

更新:顺便说一下,这次迭代是在WebBrowser控件的Navigated事件中完成的。

1 个答案:

答案 0 :(得分:2)

几年后,我回到了这段代码,最后发现问题在于我走遍了HtmlDocument.All事件处理程序中的WebBrowser.Navigated集合。正确的方法是遍历WebBrowser.DocumentCompleted中的元素。

这个错误也导致嵌入式脚本代码看似“停止”解析,就像前面提到的LINK标签一样。实际上,它并没有停止 - 它还没有完成渲染整个文档。