webbrowser visual open navigate ejemplo chrome c# .net winforms webbrowser-control

c# - visual - ¿Cómo abrir un enlace en el control webBrowser en un navegador externo?



webbrowser vba excel (6)

Tengo un control TextBox y un control WebBrowser en mi aplicación de Windows Forms. Cuando un usuario ingresa un código HTML en textBox, el control webBrowser muestra su forma compilada. El código para esto:

private void textBox2_TextChanged(object sender, EventArgs e) { webBrowser1.DocumentText = textBox2.Text; }

Pero cada vez que hago clic en un enlace en el control webBrowser, lo abre en el mismo control webBrowser. Lo que quiero es que se abra en el navegador web predeterminado del sistema. Entonces, ¿hay algún evento para este control webBrowser que maneje el clic del enlace?


¿Quizás podrías intentar usar Process.Start() en el evento de navegación?


Este código aquí debería funcionar:

private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e) { System.Diagnostics.Process.Start(e.Url.ToString()); e.Cancel = true; }

Intenté esto para estar seguro de que funcionó y lo hace!

¡¡Espero que esto ayude!!


La forma más sencilla de hacerlo sería interceptar el evento de Navigating .

public void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e) { //cancel the current event e.Cancel = true; //this opens the URL in the user''s default browser Process.Start(e.Url.ToString()); }


Me gustaría añadir algo más a esta respuesta,

El método Coz webBrowser1_Navigating se ejecuta cada vez que se cambia el contenido del webBrowser.

En su caso, siempre que establezca los valores en DocumentText , se llama a este método y cuando no hay una URL y su valor predeterminado es : en blanco . Por lo tanto, también deberíamos verificar esto, de lo contrario no cargará ningún contenido.

private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e) { if (!(e.Url.ToString().Equals("about:blank", StringComparison.InvariantCultureIgnoreCase))) { System.Diagnostics.Process.Start(e.Url.ToString()); e.Cancel = true; } }


Porque nadie ha hecho una respuesta decente a los enlaces con target="_blank" en ellos. Intentaré hacerlo.

Primero, ¿por qué no funciona esto? Porque cuando un usuario hace clic en un enlace en el control de su navegador web, no dispara el evento de navegación, dispara el evento de la nueva ventana. En el evento de la nueva ventana, no tiene acceso a la URL o al elemento en el que se hizo clic para interrumpir la nueva ventana y abrir una predeterminada. Así es como lo haces.

Primero, en tu documento evento completado agrega el siguiente código.

private void webBrowserControl_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { string tagUpper = ""; foreach (HtmlElement tag in (sender as WebBrowser).Document.All) { tagUpper = tag.TagName.ToUpper(); if((tagUpper == "AREA") || (tagUpper == "A")) { tag.MouseUp += new HtmlElementEventHandler(this.link_MouseUp); } } }

Lo que esto hace es revisar todas las etiquetas de elementos html y encontrar todas las etiquetas que define allí en la sentencia if. Para mi caso, también necesitaba etiquetas de ÁREA. Puedes coger cualquier etiqueta que quieras. Luego adjuntamos un evento de clic en ese elemento.

A continuación creamos el evento en sí con este código.

void link_MouseUp(object sender, HtmlElementEventArgs e) { Regex pattern = new Regex("href=///"(.+?)///""); Match match = pattern.Match((sender as HtmlElement).OuterHtml); string link = match.Groups[1].Value; Process.Start(link); }

Este código establece un patrón de expresiones regulares, es muy probable que deba cambiar este patrón para sus propias necesidades . Recomiendo agregar un punto de interrupción aquí y ver cómo debe verse su expresión regular. Puede probar regex en el enlace regex . Asegúrate de usar paréntesis para la agrupación. También recomiendo usar el signo de interrogación para no coincidir con avidez. Luego hacemos coincidir ese patrón y tomamos la url de los grupos del partido. Después de eso, es simplemente un caso de iniciar un proceso con esa URL. Esto abrirá el navegador predeterminado o agregará una nueva pestaña si su navegador predeterminado ya está abierto.

Lo último que debemos hacer es cancelar la lógica predeterminada para los enlaces. Hacemos esto en el evento NewWindow con el siguiente código.

private void webBrowserControl_NewWindow(object sender, CancelEventArgs e) { e.Cancel = true; }


Process.Start abrirá la URL en el navegador predeterminado, y luego solo le dices al control WebBrowser que cancele la navegación.

private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e) { Process.Start(e.Url.ToString()); e.Cancel = true; }

Acabo de crear una aplicación de muestra para probarlo, funcionó.