Cuando trabajamos con aplicaciones UWP y utilizamos el WebView podemos estar seguros de que la mayoría de páginas webs van a funcionar sin ningún problema, ya que por debajo el WebView utiliza la última versión de Microsoft Edge, en mi caso Edge 14.

00-UWP

 

Pero no ocurre lo mismo cuando creamos una aplicación WPF. En la mayoría de casos las páginas no se visualizarán correctamente e incluso obtendremos errores de JavaScript ya que el WebBrowser utiliza una versión antigua de Internet Explorer, IE7.

01-JsError

 

Por suerte, dada la gran flexibilidad que nos brinda WPF, podemos cambiar la versión del Internet Explorer que debe utilizar el WebBrowser de WPF. Para ello necesitamos modificar el registro de Windows.

 

 

Modificar la versión de Internet Explorer

 

Para cambiar la versión de Internet Explorer que debe utilizar el WebBroser de WPF en nuestra aplicación debemos crear una clave de registro en FEATURE_BROWSER_EMULATION con el nombre de nuestra aplicación y el valor de la versión de Internet Explorer que queremos que utilice.

 

Clave de registro

 

¿Dónde?

 

Debemos crear la clave en:

 

 

Nombre de la clave

El nombre de la clave debe ser el nombre de nuestra aplicación que lo podemos obtener de la siguiente forma.

 

Como podéis ver, en modo Debug podemos utilizar el asterisco para indicar que cualquier aplicación utilice la versión de Internet Explorer que indiquemos.

 

Importante: Lo ideal sería al cerrar la aplicación borrar la clave de registro para evitar que alguna otra aplicación se vea afectada, sobre todo si hemos desplegado en modo Debug.

 

Valor

Podemos asignar un valor diferente en función de la versión de Internet Explorer que queramos utilizar. Aquí podéis ver los posibles valores.

Nota: Podemos hacer que utilice Microsoft Edge  con el valor 0x00002EE1.

En nuestro caso vamos a probar con los siguientes valores:

 

Modificar la clave

Ahora, con todos los datos simplemente tenemos que cambiar la clave de registro.

 

 

Nota: Es importante llamar a este método cuando la aplicación se ha iniciado y antes de cargar el WebBrowser. En mi caso cambio la clave de registro en el OnStartup de App.xaml.cs.

 

 

Eliminar la clave

Como hemos visto antes es importante eliminar la clave de registro al cerrar la aplicación para evitar afectar a otras aplicaciones en caso de haber puesto el asterisco como nombre de la clave o simplemente para no dejar rastro de que nuestra aplicación ha pasado por allí.

En ese caso basta con crear un método para eliminar la clave y llamarlo en el OnExit.

 

 

 

Resultado

Vamos a probar la aplicación con diferentes versiones de Internet Explorer. Para realizar la prueba vamos a navegar a https://whatbrowser.org, una web que intentará obtener desde qué navegador estamos accediendo.

 

Internet Explorer 9 – 0x0000270F

En este caso seguimos obteniendo un error de JavaScript.

02-IE9

 

Internet Explorer 10 – 0x00002711

En este caso ha desaparecido el error de JavaScript y podemos ver que se ejecuta el WebBrowser como Internet Explorer 10.

03-IE10

 

Internet Explorer 11 – 0x00002AF9

Como podemos ver, ahora la web nos indica que estamos utilizando Internet Explorer 11.

04-IE11

Microsoft Edge 14 – 0x00002EE1

Con este cambio conseguimos que el WebBrowser utilice Microsoft Edge.

05-edge

Conclusiones

Como hemos podido ver no es nada difícil cambiar la versión de Internet Explorer que utiliza el WebBrowser en WPF. Aunque también es una pena que no haya una forma directa, como un miembro del control, de cambiar este aspecto ya que hoy en día el utilizar una versión tan vieja de Internet Explorer hace que la mayoría de las páginas no se visualicen correctamente o tengamos problemas con el JavaScript.

Podéis ver el código del ejemplo en GitHub.

 

 

Referencia

Browser Emulation Values

https://msdn.microsoft.com/en-us/library/ee330730(v=vs.85).aspx#browser_emulation

Código de ejemplo

https://github.com/maktub82/Samples/tree/master/IE11

 

Un saludo y nos vemos en el futuro.

Sergio Gallardo (@maktub82)