c# - WebBrowser.Document.Body 始终为空

标签 c# .net winforms webbrowser-control

我有一个 WebBrowser 文档设置为编辑模式。我正在尝试使用 WebBrowser.Document.Body.InnerText 来操作 body 元素的内部文本,但是,WebBrowser.Document.Body 仍然为空。

这是我创建文档内容的代码:

private WebBrowser HtmlEditor = new WebBrowser();
public HtmlEditControl()
{
    InitializeComponent();
    HtmlEditor.DocumentText = "<html><body></body></html>";
    myDoc = (IHTMLDocument2)HtmlEditor.Document.DomDocument;
    myDoc.designMode = "On";
    HtmlEditor.Refresh(WebBrowserRefreshOption.Completely);
    myContentsChanged = false;
}

我可以编辑代码并且一切正常,但我不明白为什么 HtmlEditor.Document.Body 保持为空。我知道每当我需要将文本加载到表单中时,我总是可以重置文档正文,但我更愿意理解为什么会这样,如果没有别的,那么为了知识。

非常感谢对此的任何帮助。

最佳答案

您必须等待 Web 浏览器的 DocumentCompleted 事件触发才能使 DomDocument.Body 不为空。我刚刚对此进行了测试以进行验证。我想问题仍然存在:当文档尚未完全加载时,您如何能够通过底层 COM 接口(interface)进行编辑?

我检查了 DocumentCompleted 和构造函数中的 IHTMLDocument2 指针是否相同。它们是,这可能表明底层 COM 对象重用了单个 HTML 文档对象。看起来你在构造函数中所做的任何更改至少都有很大的机会被覆盖或抛出异常。

例如,如果我在构造函数中这样做,我会得到一个错误:

IHTMLDocument2 p1 = (IHTMLDocument2) HTMLEditor.Document.DomDocument;

p1.title = "Hello world!";

如果我在 DocumentCompleted 处理程序中执行相同的操作,它会正常工作。

希望这对您有所帮助。谢谢。

关于c# - WebBrowser.Document.Body 始终为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8141061/

相关文章:

vb.net - Windows 服务启动失败

c# - 获取屏幕边缘和网页之间的距离

C# 在winform中插入新项目后设置ListView项目被选中

C# 在拆分容器顶部隐藏和显示面板

c# - linq to sql where子句和计数

c# - 在 C# 中允许 CX509PrivateKeyClass 的 KeyProtection

c# - XNA/C# 世界矩阵中的 2D 坐标缩放到 3D View 矩阵?

c# - 如何将 Spatial Solr 添加到 Solrnet 查询

c# - 隔离存储误解

c# - 元组的 GetHashCode hack