¿Cómo puedo hacer que el control WebBrowser muestre contenidos modernos?

Resuelto B. Clay Shannon-B. Crow Raven asked hace 8 años • 4 respuestas

Creé una aplicación Winforms que usa un control WebBrowser; Asigno dinámicamente su Uri. Funcionó bien por un tiempo, pero ahora recibo este mensaje:

Parece que estás utilizando un navegador no compatible. Los navegadores más antiguos pueden poner en riesgo tu seguridad, son lentos y no funcionan con las funciones más nuevas de Google Maps. Para acceder a Google Maps, deberá actualizar a un navegador moderno.

Las dos últimas palabras son un enlace y, siguiendo ese enlace, veo:

Actualmente estás usando... IE 11

Entonces, está bien, el componente WebBrowser usa IE 11; ¿Cómo puedo cambiar eso?

Mi máquina está configurada para utilizar Chrome como navegador; ¿Quizás el control debería usar cualquiera que sea su navegador actual? No sé si eso es posible/factible.

ACTUALIZAR

Bien, estoy dispuesto a probar la sugerencia de Reza. Pero cuando navego hasta el lugar especificado en regedit y hago clic derecho en el panel derecho para agregar una nueva entrada, tengo tres opciones:

Clave, valor de cadena, valor binario

Creo que los valores de cadena son las cadenas ".exe" y los valores binarios son los valores "dword", pero ¿cuáles deberían ser los valores "clave"?

Aceptado

Nota: La publicación trata sobre el control de WebBrowser; sin embargo, para todos los nuevos proyectos .NET, la solución principal es utilizar WebView2 . Para obtener más información, echa un vistazo a esta publicación:

  • Comenzando con WebView2 .

Control del navegador web

El WebBrowsercontrol utiliza la misma versión de Internet Explorer que está instalada en su sistema operativo, pero no utiliza el modo de documento más reciente de forma predeterminada y muestra el contenido en modo de compatibilidad.

Síntoma: como síntoma, el sitio funciona correctamente en Internet Explorer u otros navegadores, pero WebBrowserel control no muestra bien el sitio y, en algunos sitios, muestra errores de script.

Solución: puede indicarle al WebBrowsercontrol que utilice el modo de documento más reciente sin el modo de compatibilidad bajo WebBrowsercontrol. Puede seguir las instrucciones aquí para desactivar la configuración mediante el registro. [Referencia: Emulación de navegador ]

Aplicar la configuración de emulación del navegador mediante código

Si desea aplicar la configuración mediante código, ejecute el siguiente código una vez:

using (var key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(
    @"Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION",
    true))
{
    var app = System.IO.Path.GetFileName(Application.ExecutablePath);
    key.SetValue(app, 11001, Microsoft.Win32.RegistryValueKind.DWord);
    key.Close();
}

En el código anterior, he usado 11001lo que significa modo IE11 Edge.

Internet Explorer 11. Las páginas web se muestran en el modo perimetral IE11, independientemente de la directiva !DOCTYPE declarada. No declarar una directiva !DOCTYPE hace que la página se cargue en Quirks.

Aplicar la configuración de Emulación del navegador manualmente

Abra el editor del Registro y busque HKEY_CURRENT_USER, vaya a la siguiente clave:

Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION

Agregue los siguientes valores:

"YourApplicationFileName.exe"=dword:00002af9
"YourApplicationFileName.vshost.exe"=dword:00002af9

(En versiones anteriores de Visual Studio, también necesitaba agregar el valor vshost.exe cuando ejecutaba su programa en Visual Studio).

Para crear entradas, haga clic derecho en un área vacía del panel derecho, luego, en la ventana que aparece después de seleccionar dwordel valor, elija hexadecimal e ingrese 2af9:

ingrese la descripción de la imagen aquí

En los pasos anteriores, he usado 11001lo que significa modo IE11 Edge.

Utilice el control compatible con WebView para Windows Forms

También puede utilizar el nuevo control WebViewCompatible para Windows Forms . Puede ver pasos sencillos para usar aquí: Reemplace el control WebBrowser por un nuevo control compatible con WebView para Windows Forms .

WebViewCompatibleutiliza uno de los dos motores de renderizado para admitir un conjunto más amplio de clientes de Windows:

  • En dispositivos con Windows 10, el nuevo motor de renderizado Microsoft Edge se utiliza para incrustar una vista que representa contenido HTML con formato enriquecido desde un servidor web remoto, código generado dinámicamente o archivos de contenido.

  • En dispositivos que ejecutan versiones anteriores de Windows, se utiliza System.Windows.Controls.WebBrowser, que proporciona renderizado basado en el motor de Internet Explorer.

  • Nota: WebView2 es un reemplazo de WebViewy WebViewCompatible.

Establecer metaetiqueta compatible con X-UA

En caso de que tenga acceso al contenido html de la página y pueda cambiar el contenido (por ejemplo, es un archivo html local o el sitio le pertenece), puede configurar una X-UA-Compatibilemetaetiqueta similar a head: <meta http-equiv="X-UA-Compatible" content="IE=Edge" />.

Utilice otros controles del navegador

Puede confiar en otros controles del navegador como CefSharp.

Reza Aghaei avatar Jul 21 '2016 21:07 Reza Aghaei

En mi caso, para el protocolo personalizado integrado en una aplicación, solo permitiré explorar las páginas proporcionadas por la aplicación y ningún contenido externo, por lo que quería omitir el guardado en el Registro de Windows. Cuando probé después de seguir la respuesta de Reza Aghaei y descubrí que puedes cambiar el modo de compatibilidad desde la página de contenido. Esto evitará la necesidad de configurar una clave de registro, pero deberá agregarla a cada página.

Para cambiar el modo de compatibilidad de una página, debe agregar una metaetiqueta para que el motor de renderizado la aplique:

<html>
    <head>
        <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
    </head>
    <body>
    ...
    </body>
</html>
jlchavez avatar Nov 21 '2017 21:11 jlchavez

Los siguientes procedimientos agregarán la clave correcta y la eliminarán nuevamente. Llame a CreateBrowserKey al cargar el formulario en el que se encuentra su navegador web. Luego, al cerrar el formulario, llame a RemoveBrowserKey

Private Sub CreateBrowserKey(Optional ByVal IgnoreIDocDirective As Boolean = False)
    '      Dim basekey As String = Microsoft.Win32.Registry.CurrentUser.ToString
    Dim value As Int32
    '       Dim thisAppsName As String = My.Application.Info.AssemblyName & ".exe"

    ' Value reference: http://msdn.microsoft.com/en-us/library/ee330730%28v=VS.85%29.aspx
    ' IDOC Reference:  http://msdn.microsoft.com/en-us/library/ms535242%28v=vs.85%29.aspx
    Select Case (New WebBrowser).Version.Major
        Case 8
            If IgnoreIDocDirective Then
                value = 8888
            Else
                value = 8000
            End If
        Case 9
            If IgnoreIDocDirective Then
                value = 9999
            Else
                value = 9000
            End If
        Case 10
            If IgnoreIDocDirective Then
                value = 10001
            Else
                value = 10000
            End If
        Case 11
            If IgnoreIDocDirective Then
                value = 11001
            Else
                value = 11000
            End If

        Case Else
            Exit Sub
    End Select
    Microsoft.Win32.Registry.SetValue(Microsoft.Win32.Registry.CurrentUser.ToString & BrowserKeyPath, _
                                              Process.GetCurrentProcess.ProcessName & ".exe", _
                                              value, _
                                              Microsoft.Win32.RegistryValueKind.DWord)
End Sub

Private Sub RemoveBrowserKey()
    Dim key As Microsoft.Win32.RegistryKey
    key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(BrowserKeyPath.Substring(1), True)
    key.DeleteValue(Process.GetCurrentProcess.ProcessName & ".exe", False)
End Sub
John avatar Aug 17 '2018 18:08 John

La clase C# WebBrowser es básicamente un contenedor de IE y debido a esto no se puede cambiar.

Vea este enlace:

El control WebBrowser es un contenedor administrado alrededor de un componente instalado con Internet Explorer.

Para alternativas puedes consultar

WebKit.NET

GeckoFX

Daniel avatar Jul 21 '2016 20:07 Daniel