Saltar al contenido

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

Es importante comprender el código correctamente previamente a utilizarlo a tu trabajo y si tquieres aportar algo puedes dejarlo en los comentarios.

Solución:

Control del navegador web

El WebBrowser control usa la misma versión de Internet Explorer que está instalada en su sistema operativo, pero no usa el último modo de documento 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 WebBrowser el control no muestra bien el sitio y, en algunos sitios, muestra errores de secuencia de comandos.

Solución – Puedes decirle al WebBrowser control para utilizar el último modo de documento sin modo de compatibilidad en WebBrowser control. Puede seguir las instrucciones aquí para deshabilitar la configuración usando el registro.
[Reference: Browser Emulation]

Aplicar la configuración de emulación de 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(
    @"SoftwareMicrosoftInternet ExplorerMainFeatureControlFEATURE_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 11001 lo que significa modo IE11 Edge.

Internet Explorer 11. Las páginas web se muestran en el modo de borde 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 navegue HKEY_CURRENT_USER, ve a lo siguiente key:

SoftwareMicrosoftInternet ExplorerMainFeatureControlFEATURE_BROWSER_EMULATION

Agregue los siguientes valores:

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

(En versiones anteriores de Visual Studio, necesitaba agregar vshost.exe valor también, cuando ejecuta 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 dword valor, elija hexadecimal e ingrese 2af9:

ingrese la descripción de la imagen aquí

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

Utilice WebViewCompatible Control para Windows Forms

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

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

  • En dispositivos con Windows 10, el motor de renderizado de Microsoft Edge más nuevo se usa para incrustar una vista que renderiza contenido HTML con un 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 para WebVeiw y WebViewCompatible.

Establecer metaetiqueta X-UA-Compatibile

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 a usted), puede configurar X-UA-Compatibile metaetiqueta en el head me gusta: .

Usar otros controles del navegador

Puede confiar en otros controles del navegador como CefSharp.

En mi caso para el protocolo personalizado incrustado en una aplicación, solo permitiré navegar por las páginas servidas por la aplicación y ningún contenido del exterior, 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 puede cambiar el modo de compatibilidad desde la página de contenido. Esto evitará la necesidad de configurar un registro. key, pero tendrá que agregarlo a cada página.

Para cambiar el modo de compatibilidad de una página, debe agregar una metaetiqueta para que sea aplicada por el motor de renderizado:


    
        
    
    
    ...
    

Los siguientes procedimientos agregarán los key y retírelo de nuevo. 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

Aquí puedes ver las reseñas y valoraciones de los usuarios

Eres capaz de añadir valor a nuestra información tributando tu experiencia en las notas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *