viernes, 8 de febrero de 2008

GWT: Window.getClientHeight() erróneo

Desarrollando una aplicación en GWT me he encontrado con la necesidad de saber cuál es la altura del área destinada al documento para poder ajustar el tamaño vertical de un HorizontalSplitPanel. Para ello empleé, inicialmente, Window.getClientHeight().

Según su descripción es justo lo que necesito:
Gets the height of the browser window's client area excluding the scroll bar.

Cuál es mi sorpresa cuando bajo Internet Explorer 7 lo que retorna es la altura del elemento BODY, no del área destinada al documento (al menos en GWT 1.4.61). Tras una búsqueda en el grupo de GWT descubro que es un fallo reportado, y que sólo afecta cuando el navegador está en modo Strict, no en Quirks. Por desgracia en este caso particular estoy usando Strict, pues intento crear una interfaz basada al máximo en CSS con porcentajes para tamaños, sin tener que emplear JavaScript para dimensionar los elementos.

Puesto que pasar a Quirks no era una opción (todo se convertía en un horror al eliminar la definición del DTD) tuve que implementar mi propia función que retornara la altura que yo deseaba accediendo directamente a la propiedad en JavaScript, gracias a JavaScript Native Interface (JSNI). Así la función deseada resultó muy simple:
public static native int getClientHeightFixed()
/*-{
return $doc.documentElement.clientHeight;
}-*/;

Esta pequeña función me ha funcionado sin problemas tanto en IE7 como en FF2. Espero que le resulte a alguien de utilidad y le ahorre un buen rato de búsqueda por la red.

No hay comentarios: