从.net(C#)中的Webbrowser控件中检索选定的文本
Posted
技术标签:
【中文标题】从.net(C#)中的Webbrowser控件中检索选定的文本【英文标题】:Retrieving Selected Text from Webbrowser control in .net(C#) 【发布时间】:2010-09-18 01:21:48 【问题描述】:我一直在试图弄清楚如何在我的浏览器控件中检索用户选择的文本,并且在挖掘了 msdn 和其他资源之后没有运气,所以我想知道是否有办法真正做到这一点.也许我只是错过了什么。
感谢您对此提供的任何帮助或资源。
谢谢
【问题讨论】:
【参考方案1】:您需要使用 WebBrowser 控件的 Document.DomDocument 属性并将其转换为 Microsoft.mshtml 互操作程序集中提供的 IHtmlDocument2 接口。这使您可以访问在 IE 中实际运行的 javascript 可用的完整 DOM。
为此,您首先需要将项目的引用添加到 Microsoft.mshtml 程序集,通常位于“C:\Program Files\Microsoft.NET\Primary Interop Assemblies\Microsoft.mshtml.dll”。可能有多个,请确保选择具有此路径的引用。
然后获取当前的文本选择,例如:
using mshtml;
...
IHTMLDocument2 htmlDocument = webBrowser1.Document.DomDocument as IHTMLDocument2;
IHTMLSelectionObject currentSelection= htmlDocument.selection;
if (currentSelection!=null)
IHTMLTxtRange range= currentSelection.createRange() as IHTMLTxtRange;
if (range != null)
MessageBox.Show(range.text);
有关从 .NET 应用程序访问完整 DOM 的更多信息,请参阅:
Walkthrough: Accessing the DHTML DOM from C#
IHTMLDocument2 Interface reference
【讨论】:
哇,控件比我想象的更强大! 如果您不介意对 IE/mshtml 的依赖,这是一种非常强大且相对简单的方法,可以将 Web 样式的 UI 添加到您的桌面应用程序中。 2路通信和事件也很简单,如果有人感兴趣,请告诉我。 非常感谢。这正是我一直在寻找的。我正在处理的项目使用 HTML,这就是我选择 Web 浏览器控件的原因。我只是想不出一种方法来获取选定的文本。还要感谢来源,他们提供了我刚刚错过的有价值的信息。 谢谢你,Ash,你救了我几个小时的噩梦 :) @Ash,如果我使用 WPF 的 webBrowser 会怎样? WPF的webBrowser没有webBrowser1.Document.DomDocument【参考方案2】:以防万一有人对不需要添加对 mshtml.dll 的引用的解决方案感兴趣:
private string GetSelectedText()
dynamic document = webBrowser.Document.DomDocument;
dynamic selection = document.selection;
dynamic text = selection.createRange().text;
return (string)text;
【讨论】:
你接受的答案有有用的信息,这是一个更简单的答案,实际上是 OP 想要的,而不需要对项目添加额外的引用。【参考方案3】:如果你只是使用下面的技术呢?
//将选中的文本复制到剪贴板
Clipboard.Clear();
SendKeys.SendWait("^(c)");
//从剪贴板中获取选中的文本
string strClip = Clipboard.GetText().Trim();
Clipboard.Clear();
【讨论】:
【参考方案4】:我假设您有一个 WinForms 应用程序,其中包含一个可以打开网站的控件。
检查您是否可以在 Web 浏览器控件中注入/运行 JavaScript。使用 JavaScript,您将能够找出选择的内容并将其返回。否则,我怀疑 Web 浏览器控件是否知道其中选择的内容。
【讨论】:
您可以在 Web 浏览器中运行 JavaScript 并与 C# 对话。例如看到这个***.com/questions/305915/…以上是关于从.net(C#)中的Webbrowser控件中检索选定的文本的主要内容,如果未能解决你的问题,请参考以下文章
如何从托管 WebBrowser 控件的应用程序调用 WebBrowser 控件查看的页面中的 JavaScript 函数?
VB.NET WebBrowser 控件 OnClick 事件未触发