我有一个 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/