如何在 Web 浏览器控件中获取所选文本
本文关键字:获取 文本 控件 Web 浏览器 | 更新日期: 2023-09-27 18:30:17
我可以通过以下方法获取 WPF 中 Web 浏览器控件的选定文本:
IHTMLDocument2 doc1 = webBrowser.Document as IHTMLDocument2;
IHTMLDocument3 doc = webBrowser.Document as IHTMLDocument3;
IHTMLSelectionObject currentSelection = doc1.selection;
if (doc1.selection.type == "Text")
{
IHTMLTxtRange range = (IHTMLTxtRange)doc1.selection.createRange();
}
这工作得很好,如果我将 range.text 的值设置为其他值,它会更改文本的值。我遇到的唯一问题是在Gmail等网页上,上面有某种所见即所得的编辑器,selection.type总是"None"。我怀疑这是因为文本编辑器在技术上是一个子文档。我不确定如何查找子文档并检查是否选择了文本。谁能帮我?谢谢!
你可以检查document.activeElement是否是一个框架并且具有contentWindow属性(document.activeElement.contentWindow != null
),然后你可以使用contentWindow.document
来到达框架的内部document
。以递归方式执行此操作,直到找到带有 document.selection != null
的帧。
为了说明这一点:
主.html:
<!DOCTYPE html>
<body>
<iframe src="iframe.html"></iframe>
</body>
iframe.html:
<!DOCTYPE html>
<head>
<script>
window.onload = function()
{
window.focus();
document.execCommand("SelectAll", false);
}
</script>
</head>
<body contentEditable="true">
This is editable
</body>
C#:
var text = this.wb.Document.InvokeScript("eval", new object[] {
"document.activeElement.contentWindow.document.selection.createRange().text" });
MessageBox.Show(text.ToString());
显示:
这是可编辑的