我一直在试图弄清楚如何检索用户在我的网络浏览器控件中选择的文本,但在深入研究 msdn 和其他资源后却没有运气,所以我想知道是否有办法真正做到这一点。也许我只是错过了一些东西。

我感谢任何与此相关的帮助或资源。

谢谢

有帮助吗?

解决方案

您需要使用 WebBrowser 控件的 Document.DomDocument 属性,并将其转换为 Microsoft.mshtml 互操作程序集中提供的 IHtmlDocument2 接口。这使您可以访问完整的 DOM,就像在 IE 中实际运行的 Javascript 一样。

为此,您首先需要将对项目的引用添加到 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 的更多信息,请参阅:

其他提示

以防任何人对不需要添加对mshtml.dll的引用的解决方案感兴趣:

private string GetSelectedText()
{
    dynamic document = webBrowser.Document.DomDocument;
    dynamic selection = document.selection;
    dynamic text = selection.createRange().text;
    return (string)text;
}

如果您只是使用下面的技术?

//将所选文本复制到剪贴板

        Clipboard.Clear();
        SendKeys.SendWait("^(c)");

//从剪贴板中获取选定的文字

        string strClip = Clipboard.GetText().Trim();
        Clipboard.Clear();

我假设您有一个WinForms应用程序,其中包含一个打开网站的控件。

检查您是否可以在webbrowser控件中注入/运行JavaScript。使用JavaScript,您将能够找到所选内容并将其返回。否则,我怀疑Web浏览器控件是否知道其中选择的内容。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top