【问题标题】:Retrieving Selected Text from Webbrowser control in .net(C#)从.net(C#)中的Webbrowser控件中检索选定的文本
【发布时间】:2010-09-18 01:21:48
【问题描述】:

我一直在试图弄清楚如何在我的浏览器控件中检索用户选择的文本,并且在挖掘了 msdn 和其他资源之后没有运气,所以我想知道是否有办法真正做到这一点.也许我只是错过了什么。

感谢您对此提供的任何帮助或资源。

谢谢

【问题讨论】:

    标签: c# winforms webbrowser-control


    【解决方案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 的更多信息,请参阅:

    【讨论】:

    • 哇,控件比我想象的更强大!
    • 如果您不介意对 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 浏览器控件是否知道其中选择的内容。

      【讨论】:

      猜你喜欢
      • 2023-03-15
      • 2010-12-02
      • 2014-09-28
      • 1970-01-01
      • 2016-04-13
      • 1970-01-01
      • 2017-04-19
      • 2010-12-23
      • 1970-01-01
      相关资源
      最近更新 更多