2012-07-22 75 views
2

我使用WebBrowser.Document.DomDocument,发现它有不同的DOM模型,我可以在IE调试工具中看到。为什么WebBrowser.Document.DomDocument不包含实际的DOM模型?

IE调试工具包含有效的实际DOM模型,而WebBrowser.Document.DomDocument不包含通过JavaScript动态添加的一些元素。

其实WebBrowser控件显示所有元素,即使是动态添加的元素,但WebBrowser.Document.DomDocument包含过时的DOM模型。

IE调试工具可以显示当前状态下的实际修改DOM模型,如何使用WebBrowser组件获取当前DOM模型?

这绝对应该是一种方法。

回答

1

这个问题可以使用更好的文档。但这是一个非常经典的问题,这是一个计时问题。毫无疑问,你可以在浏览器的DocumentCompleted事件中访问DomDocument属性太早。这大致是javascript代码开始执行的时间。因此,您将在脚本进行更改之前获取DOM的版本。

有没有体面的方式来处理这个问题。 Javascript的执行完全是异步的,没有任何事件可以表明任何脚本代码已经启动或停止运行。你可以做的唯一体面的事情是“等一会儿”,用一个计时器。最好反复进行,直到您看到DOM中的一个好迹象表明脚本已完成更改。

+0

是的,这是正确的答案。我仍在寻找如何更好地等待并检查Ajax添加的所需元素何时出现。对于没有我用 'ThreadPool.QueueUserWorkItem(新WaitCallback(O => { 了Thread.Sleep(2000); webBrowser1.Invoke(新的行动(()=> { //做一些事情 }) ); }));' – Zelid 2012-07-23 06:41:32

相关问题