Pregunta

He estado tratando de averiguar cómo recuperar el texto seleccionado por el usuario en mi control del navegador web y no he tenido suerte después de revisar MSDN y otros recursos, por lo que me preguntaba si hay una manera de hacerlo. . Tal vez simplemente me he perdido algo.

Aprecio cualquier ayuda o recursos con respecto a esto.

Gracias

¿Fue útil?

Solución

Debe usar la propiedad Document.DomDocument del control WebBrowser y convertirla en la interfaz IHtmlDocument2 provista en el conjunto de interoperabilidad Microsoft.mshtml. Esto le da acceso al DOM completo, ya que está disponible para Javascript que se ejecuta en IE.

Para hacer esto, primero debe agregar una referencia a su proyecto al conjunto de Microsoft.mshtml normalmente en " C: \ Archivos de programa \ Microsoft.NET \ Primary Interop Assemblies \ Microsoft.mshtml.dll " ;. Puede haber más de uno, asegúrese de elegir la referencia con esta ruta.

Luego, para obtener la selección de texto actual, por ejemplo:

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);
        }
    }

Para obtener más información sobre cómo acceder al DOM completo desde una aplicación .NET, consulte:

Otros consejos

En caso de que alguien esté interesado en una solución que no requiera agregar una referencia a mshtml.dll:

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

¿Y si solo usas la técnica de abajo?

// Copia el texto seleccionado al portapapeles

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

// Obtener texto seleccionado desde el portapapeles

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

Supongo que tiene una aplicación WinForms que incluye un control que abre un sitio web.

Verifique si puede inyectar / ejecutar JavaScript dentro del control de su navegador web. Con JavaScript, podrá averiguar qué se seleccionó y devolverlo. De lo contrario, dudo que el control del navegador web tenga algún conocimiento de lo que está seleccionado dentro de él.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top