Checho's Blog

Talking about Windows Internals, Deployment and Troubleshooting

Artículos recientes

News and Awards

Follow me on Twitter and LinkedIn

@secalderonr

View Sergio Calderon's profile on LinkedIn

Recomendados

Tags

Community

Email Notifications

Archives

Windows 7, Internet Explorer 9 y la Vista de Compatibilidad


IE9_h_c

Hola a todos,

Antes que nada, espero que este sea un gran año para todos ustedes.

Cuando una compañía está evaluando Compatibilidad de Aplicaciones sobre un nuevo sistema operativo, como lo es Windows 7 ahora, o bien piensa entrar en un piloto para hacerlo – Como tal vez varias empresas lo harán este año-, no sólo se pueden tener en cuenta lo que corra bien, o se haga correr en el escritorio, existe la necesidad de encontrar y solventar problemas de compatibilidad con aplicaciones web (Que trabajan desde un browser), o bien, las mismas páginas públicas o de intranet con la que los empleados requieren estar interactuando.

Esto no es un trabajo fácil, puesto que es necesario que la aplicación o la página web se desenvuelva bien en la nueva versión del navegador, antes de ir a aprobar una migración. Afortunadamente, como con la Compatibilidad de aplicaciones de escritorio, Windows, y más específicamente Internet Explorer en su versión 8 y 9 integran una característica llamada Vista de Compatibilidad (Compatibility View).

A diferencia del Modo de Compatibilidad para las aplicaciones de escritorio, la Vista de Compatibilidad se puede activar en cualquier página que lo requiera símplemente con hacer clic en el icono de la parte superior derecha de la barra de Direcciones, identificado con una hoja partida a la mitad:

image

A partir de que se active la Vista de Compatibilidad, la página se verá y se comportará como si estuviera trabajando sobre Internet Explorer 7.

Con esto basta para que una gran cantidad de aplicaciones o páginas web sigan funcionando sin ningún tipo de problema.

¿Cómo funciona?

Ahora bien, ¿Qué sucede cuando activamos la Vista de Compatibilidad realmente?

Cuando visitamos un sitio web, el navegador en el que estemos siempre entrega una Cadena de Agente de Usuario al servidor donde está alojado la página web, ésta cadena incluye información relevante como la versión del sistema operativo, la versión del navegador en el que estamos, entre otros datos que utiliza el servidor para generar y mostrar el contenido de acuerdo al navegador en el que estemos y sus características.

Podemos ver un ejemplo de esto visitando la página: http://whatsmyuseragent.com/

Apenas ingresamos, veremos que nos entrega La cadena de agente de usuario que el Servidor haya identificado (Y que el navegador le haya enviado):

image

Como ven, la Cadena de Agente de Usuario me devolvió datos tanto de mi navegador como de mi sistema operativo, para este caso específico, la versión del navegador que detecta es MSIE 9.0, es decir, Microsoft Internet Explorer 9.0.

*Nota: Internet Explorer se identifica él mismo como Mozilla, no se alarmen =)

Esta es la misma información que recibe cada servidor de las páginas web, lo unico malo es que al renderizar el contenido de la página web, muchos dependen sólo de la versión que detecten, similar a lo que sucede con las aplicaciones de escritorio, por lo tanto, si un servidor host detecta una versión de IE 9 en vez de IE 7, y sólo se basa en esto, presentará la página con algunas incoherencias o fallos funcionales.

Aquí, cuando surgen los problemas, es cuando actúa la Vista de Compatibilidad, y afortunadamente, el concepto se asemeja mucho al de la compatibilidad de escritorio (Aunque funciona diferente), básicamente, Internet Explorer 9 devolverá una Cadena de Agente de Usuario diferente a la que realmente es, específicamente, devolverá la correspondiente a la que se mostraría si el navegador que estuviera instalado fuera Internet Explorer 7, es decir, “Mentira sobre versión”.

En la misma página de whatsmyuseragent.com, si se activa la Vista de compatibilidad, devolvería esto:

image

Los servidores host detectarán Mozilla 4.0, que equivale a Internet Explorer 7 (MSIE 7.0), y con esta información, renderizarán el contenido de la página para que se muestre como si estuviera allí, lo que hará que nuestro sitio probablemente, funcione bien.

Para identificarlo de una forma visual, cuando se activa la Vista de Compatibilidad, el mismo icono de la hoja partida a la mitad de la barra de direcciones en el navegador se verá de color azúl:

image

La Vista de Compatibilidad se puede activar manualmente página por página, o bien ingresando toda una lista manual de sitios desde el navegador, para esto basta con presionar la tecla ALT para mostrar la barra de menú de Internet Explorer, ir al menú Herramientas y seleccionar “Configuraciones de la vista de compatibilidad”:

image

En la ventana de Configuración, podemos especificar todos los sitios que deseemos que estén en Vista de compatibilidad escribiéndolos debajo de “Agregar este sitio web”, cada que vayamos adicionando sitios, los veremos en una lista inferior desde la que podemos agregar o remover según nuestra necesidad:

image

Sin embargo, esta configuración no se guarda para todos los usuarios, por lo que viene el primer problema, a pesar de ser fácil, desde el navegador no es posible generar la Vista de compatibilidad para cada usuario que inicie sesión en el equipo.

Para hacer esto, como casi todo en Windows, hay dos posibilidades, tratar de replicar la configuración que se haga en el Registro de Windows en todos los usuarios (No siempre se Windows lo reconoce), o hacer esta personalización para todos los usuarios a nivel de Políticas de Grupo – Si es que la política existe claro está-.

Por supuesto, la segunda opción es la más soportada, fácil y rápida, y en este caso, Internet Explorer 9 tiene unas políticas listas para personalizar la Lista de Compatibilidad para todos los usuarios, pero, primero veremos un poco cómo se comporta Windows para identificar un sitio que debe estar en Vista de compatibilidad según se lo hayamos especificado.

Como siempre, Process Monitor de Sysinternals es la herramienta adecuada para intentar seguir a Windows, aprender y determinar su comportamiento.

Si habilitamos un sitio en Vista de compatibilidad, y posteriormente volvemos a Process Monitor y seguir el resultado de la traza, encontraremos que hay un comportamiento muy interesante dentro de las claves de Registro correspondientes a Internet Explorer:

IE2

La operación que Windows hace es utilizar la función de RegCreateKey para crear la clave de ClearableLisData en la ruta: HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer \BrowserEmulation, posteriormente, usa la función de RegSetValue para establecer el valor de UserFilter y por último hace uso de la función RegCloseKey para terminar la operación en la clave.

Pero, ¿Qué tiene de importante este valor? Si desde Process Monitor hacemos clic derecho, Jump To a la clave que se creó, podremos ver el valor UserFilter, que es de tipo Binario:

image

Pero si lo abrimos haciendo doble clic para modificarlo, podemos identificar algo verdaderamente interesante:

image

Un Valor binario en el Registro, se compone por dos características claves, la primera columna completa de letras y números de la izquierda, son los digitos binarios que representan las letras y símbolos que se ven en la segunda columna de la derecha, aunque no siempre son exactamente los mismos – Y esa es una respuesta que todavía no estoy en capacidad de dar para el que se pregunte la razón –.

Para este caso, al yo activar La vista de compatibilidad en la página une.com.co, en el valor Binario de UserFilter, almacenará esta página para que Windows sepa que la debe mostrar en Vista de compatibilidad en el usuario en que se haya establecido. Como ven, después del valor resaltado en rojo, se puede ver la dirección de la página.

Cabe destacar que no se crea un valor binario por cada página en la que se indica la vista de compatibilidad, el mismo valor UserFilter guarda todas las páginas que se establezcan sea manualmente o por la Lista de compatibilidad desde el menú de Herramientas de Internet Explorer.

Lamentablemente, de esta forma, así se replique en HKEY_LOCAL_MACHINE, no se refleja la Vista de Compatibilidad en los demás nuevos usuarios que ingresen en el equipo, sólo si se exporta la llave de registro y se importa en el nuevo usuario funciona.

A pesar de todo, siempre quedan las políticas de Grupo para cubrir esta necesidad. Smile

Lista de Compatibilidad a través de GPO

Para establecer una Lista de Compatibilidad utilizando GPO, que en palabras generales, son varios sitios en vista de compatibilidad, se debe abrir el Editor de Políticas (Gpedit.msc), navegar hasta Configuración de Equipo\Plantillas Administrativas\Componentes de Windows\Internet Explorer\Vista de Compatibilidad.

En el panel derecho donde se encuentran las plantillas disponibles, doble clic en “Usar Lista de Política para sitios de Internet Explorer 7” (Use Policy List of Internet Explorer 7 sites).

Seleccionar habilitar y clic en el botón Mostrar para adicionar todos los sitios que deseamos se mantengan en Vista de Compatibilidad predeterminádamente:

image

En la ventana de Mostrar contenidos, debemos escribir todos los sitios que predeterminádamente estarán en Vista de Compatibilidad para cada usuario nuevo que inicie sesión, posteriormente aceptar y aplicar la política para que empiece a suritir efecto:

image

Mientras se mantenga activa la política, todos los sitios que se pusieron en Vista de Compatibilidad, se les desaparecerá el icono que identifica la característica para que no pueda ser deshabilitada:

image

Hasta aquí y con esto, sería suficiente para garantizar el comportamiento en todos los usuarios, la nueva inquietud es: ¿Qué hacer los que no no tienen una edición de Windows 7 que integre el Editor de políticas de grupo? ¿Qué hacer con los que no están unidos a un dominio además?

Recordemos que, como hemos visto en varios artículos, cada política lleva por debajo una o más modificaciones al Registro de las que tal vez no nos damos cuenta, por lo que la respuesta sería: ¡Busquemos y repliquemos!

Analizando la política…

Cuando se aplica esta política para mantener una Lista de Compatibilidad, si nos ayudamos con Process Monitor nuevamente, veremos dónde opera internamente Windows en el Registro para que el sistema operativo reconozca y encuentre los sitios que debe mantener compatibles:

image

Windows, como es supremamente inteligente, siempre busca las claves y los valores que requiere, si no los encuentra, los crea, en la captura de arriba es donde crea por primera vez lo que necesita.

Básicamente, utiliza la función de RegCreateKey para crear la clave:
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Internet Explorer\BrowserEmulation

Hasta ahí mantiene el mismo patrón del comportamiento de Windows cuando se activa la vista de compatibilidad, sin embargo, abajo Windows utiliza nuevamente la función de RegCreateKey para crear la clave:
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Internet Explorer\BrowserEmulation\PolicyList

Una vez creada esta clave, establece los valores que identifican las páginas que se agregaron a la Lista de compatibilidad, en este caso el de “www.une.net.co” por ejemplo, si se ve directamente desde el Registro de Windows aparecen todos los que se integraron en la lista de la Política:

image

Como siempre, una vez terminadas las operaciones, Windows vuelve a cerrar las llaves de registro utilizadas.

Ya sabemos cómo Windows identifica una vez creada la política, las páginas que debe mantener en modo de compatibilidad.

Para replicar esto sin Editor de políticas, hacemos lo siguiente:

Nota: Para temas de seleccionar una página, utilizaré la de www.wintecnico.com del gran Maestro Daniel Martín.

En el Equipo donde queramos crear la lista de compatibilidad para todos los usuarios, hacemos clic en Inicio, digitamos Regedit y presionamos INTRO, esto nos abrirá el editor de registro de Windows.

Navegamos hasta la clave:

HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft

Clic derecho sobre la clave de Microsoft, seleccionamos Nuevo (New) > Clave (Key):

image

La llamamos Internet Explorer

image

Nos ubicamos en la clave de Internet Explorer, clic derecho, Nuevo (New) > Clave (Key) y la llamamos BrowserEmulation

Sobre la clave de BrowserEmulation, hacemos clic derecho, Nuevo (New) > Clave (Key) y la llamamos PolicyList; el arbol creado debería verse así:

image

Finalmente, sobre PolicyList, en el espacio en blanco de la parte derecha, hacemos clic derecho, Nuevo (New) > Valor de cadena (String Value):

image

El nombre debe ser la dirección completa de la página que deseamos emular en Vista de compatibilidad (Puede ir con o sin www. al principio). Por ejemplo, para este artículo, creé el valor de wintecnico.com

Debemos abrir el Valor recien creado y como contenido, especificamos también la dirección completa de la página, es decir, igual que su propio nombre de valor:

image

¡Esto es todo!

Si el sitio quedó bien indicado, al abrir nuevamente la página desde cualquier usuario debería quedar en Vista de compatibilidad, sin posibilidad de quitarla:

image

*Nota: Noten que si no estuviera en Vista de compatibilidad, y se pudiera editar, la barra de direcciones se vería con el icono de la hoja partida a la mitad:

image

Cada nueva página que deseemos agregar, tendríamos que crearla con los pasos anteriores como un valor de cadena, replicar esto ya pero para otros equipos, bastaría con exportar toda la clave de HKEY_LOCAL_MACHINE e importarla en donde queramos.

Espero que les pueda ser de utilidad, ¡Comentarios bienvenidos!

Saludos,

Checho

Posted: 4/1/2012 16:09 por Checho | con no comments |
Comparte este post: