¿Cómo puedo obtener el control WebBrowser para mostrar contenidos modernos?

Creé una aplicación de 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 usando un navegador no compatible. Los navegadores antiguos pueden poner en riesgo su seguridad, son lentos y no funcionan con las características más recientes de Google Maps. Para acceder a Google Maps, deberás actualizar a un navegador moderno.

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

En este momento 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 usar Chrome como su navegador; quizás el control debería usar lo que sea que sea su navegador actual? No sé si eso es posible / factible.

ACTUALIZAR

De acuerdo, estoy dispuesto a probar la sugerencia de Reza. Pero cuando navego hasta el lugar especificado en regedit y hago clic con el botón derecho en el panel derecho para agregar una nueva entrada, tiene tres opciones:

Clave, valor de cadena, valor binario

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

El control WebBrowser utiliza la misma versión de Internet Explorer que está instalada en su sistema operativo, pero no utiliza el último modo de documento de manera predeterminada y muestra el contenido en modo de compatibilidad.

Como síntoma, puede ver el sitio en Internet Explorer, pero WebBrowser control WebBrowser no muestra el sitio correctamente y para algunos sitios también muestra un error de script.

Solución

Puede decirle al control WebBrowser que use el último modo de documento sin modo de compatibilidad en WebBrowser control WebBrowser . Puede seguir las instrucciones aquí para deshabilitar la configuración usando el registro.

Aquí está la configuración que utilicé. Apliqué la configuración en HKEY_CURRENT_USER para que funcione:

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

y estos valores:

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

No te olvides de vshost.exe . Cuando ejecuta su progtwig en Visual Studio, lo necesita.

Hace que el control del navegador use Internet Explorer 11 para que las páginas web se muestren en el modo de borde IE11, independientemente de la directiva declarada! DOCTYPE. Si no se declara una directiva! DOCTYPE, la página se cargará en Quirks.

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

enter image description here

En mi caso, para el protocolo personalizado incrustado en una aplicación, permitiré solo navegar por las páginas servidas por la aplicación y sin contenido desde el exterior, por lo que quería omitir el guardar en el Registro de Windows. Cuando probé después de seguir a Reza Aghaei respondo y descubrí que puedes cambiar el modo de compatibilidad desde dentro de la página de contenido. Esto omitirá 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 representación lo aplique:

      ...   

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

Ver este enlace:

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

Para alternativas puedes echar un vistazo

WebKit.NET

GeckoFX

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, cuando cierre 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