dominios y alojamiento web en hostalia

Detección de JavaScript con Ajax.net

09 de June de 2011
Valoración del artículo:
En este articulo mostramos como podemos detectar si el cliente web esta ejecutando Javascript, lo que nos ayuda a hacer webs accesibles y plenamente funcionales.
A la hora de desarrollar páginas web avanzadas, muchos de nosotros nos hemos hemos tenido que enfrentar al problema de la accesibilidad. Casi siempre, en ese camino, nos hemos encontrado con la disyuntiva de la usabilidad frente a la accesibilidad. Inevitablemente nos hacemos esta pregunta ¿Hacer páginas web accesibles está reñido con la usabilidad?

Quizás la anterior pregunta sería muy larga de analizar y posiblemente cada uno de nosotros, según nuestras propias experiencias, tengamos una respuesta. Sin embargo, en este artículo vamos a centrarnos en una cuestión un tanto más específica, pero muy relacionada con la anterior: ¿Qué puedo hacer para continuar usando Javascript y sin embargo la web sea accesible?

La realidad, a la hora de hacer un desarrollo web , nos lleva a entender que hacer un site accesible no es complicado, siempre que se sigan unas normas estrictas de diseño e implementación. Pero, cuando además se quiere dotar al proyecto de una buena experiencia de usuario, la cosa cambia.

Hasta ahora hemos visto equipos de desarrollo que realizan dos portales , uno accesible y otro no accesible, de tal manera que según se activa o desactiva el Javascript la web va redirigiendo a una versión u a otra. Para nosotros esta solución tiene una gran desventaja, además de la necesidad de duplicar nuestro volumen de trabajo, pues dicha alternativa conlleva el mantenimiento de dos portales en paralelo, lo que puede crear incongruencias. Aunque tiene la ventaja de que la página es plenamente funcional y es plenamente accesible.

La otra solución es la de poner etiquetas noscript y dotar de esa funcionalidad a la web…

La solución que hoy proponemos trata de unir las etiquetas noscript con una nueva técnica que combina el Ajax y métodos de página, para poder detectar si está o no activo el motor Javascript en el navegador del usuario.

En lo primero que podemos pensar es en utilizar el objeto Request.Browser.JavaScript, sin embargo, esto trae problemas ya que solo dice si el navegador lo admite , pero no nos dice si está activo (además de que ese objeto está en desuso y acceder a él nos arrojará un bonito Warning).

El código (en c#) de la solución propuesta es el siguiente:

public static bool JavascriptActivo { get; set; }
#region Eventos del formulario
protected void Page_Load(object sender, EventArgs e)
{
JavascriptActivo = false;

}

#endregion

[WebMethod]
public static void TieneJavascript()
{
JavascriptActivo = true;
}

Por su parte, en el aspx tendríamos que utilizar el siguiente código:

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="True">
</asp:ScriptManager>

<script language="javascript" type="text/javascript">
PageMethods.TieneJavascript();
</script>

Con esto le estamos diciendo que queremos utilizar el método de página “TieneJavaScript”, el cual activa la propiedad estática que define si utiliza Javascript. Y por último, en cada postback le decimos que la ponga a false (que no utiliza Javascript). En realidad, el poner esta propiedad a false es para detectar si mantiene activo el Javascript.

La explicación es sencilla, según el ciclo de vida primero se ejecuta el onload, y luego se renderiza la página, es entonces cuando se ejecuta el Javascript, que está funcionando por Ajax, y por lo tanto no realiza refresco de la página.

Si utiliza Javascript se hace la llamada al método de página y todo transcurre como se espera, si no, simplemente se actualiza la variable y se muestra la página sin Javascript.

Conclusión:

El 28 de diciembre del 2007 se publicó la Ley de Medidas de Impulso de la Sociedad de la Información. En la misma se obliga a los entes públicos a la eliminación de barreras de accesibilidad de sus sitios. Esta es la razón principal por la que todo desarrollador, debe aprender las reglas para realizar sus desarrollos web de forma accesible. Entre estas normas destacamos la imposibilidad de ejecución de Javascript, o mejor dicho, la necesidad de crear una opción mediante la cual se pueda hacer lo mismo que se implementa con Javascript, pero con programación a través del servidor.

Hasta ahora las medidas que se han tomado, pasaban por la duplicidad de código, redirigiendo a páginas accesibles y dejando el portal no accesible a disposición de usuarios sin limitaciones.

En nuestra solución damos un remedio a los inconvenientes de la situación anterior, ya que al ejecutar el script a descargase la página detectamos en las primeras fases si se esta ejecutando o no, y en sucesivos postback estaremos seguros de cual es la situación actual de navegador.

Si a eso le sumamos que por defecto el estado del Javascript del navegador cliente será estable nos da un maravilloso juego de probar una vez (en la página de inicio) y guardar dicho estado en la session de usuario.

Todo esto nos lleva a una amplia gama de posibilidades, pero siempre con la ventaja de no tener que duplicar el códigoS

Compartir en redes sociales

Comentarios
Fueron enviados 5 comentarios al artículo
5 comentarios revisados:
Muy útil
Por: Ana
09/6/2011
Muchas gracias por publicar este artículo tan interesante.

angeles...
Pequeña duda sobre un buen articulo
10/6/2011
Está explicado muy claramente y es muy buena idea... aunque tengo una duda... la inicialización de la propiedad dentro del load hace que se ejecute en cada postback, con lo que se pone a false, ¿ se podría controlar eso?... muchas gracias por el aporte
Respondiendo a Angeles
11/6/2011
Si, si se puede. En el ejemplo puse el codigo necesario para hacer que la tecnica funcione, pero se puede poner dentro del load, un:
if (!ispostback)
{
TieneJavaScript=true;
}
de esta forma solo se activa cuando realmente hace una redirección, activa el javascript, pero no dentro de un postback

Un saludo
Comentario....
Por: Pablo
16/6/2011
Resulta un poco raro y hasta gracioso cómo solucionan este tipo de cosas en general quienes programan en .net... lo primero que se debería decir, es que las páginas deberían armarse primero sin javascript, y luego agregar las rutinas javascript que se quieran, pero antes la web debe ser funcional SIN javascript. Otra cosa extraña es que todas las páginas (salvo algunas excepciones) y sitios bien desarrollados, deberían funcionar bien aún con el javascript deshabilitado, recordemos por ejemplo, que los buscadores de internet no ejecutan el javascript, por lo cual, si la página no entrega todo su contenido, aún sin javascript, entonces ese contenido es invisible a los motores de búsqueda (léase google que es -practicamente- el único que importa, ya que todos sabemos que bing copia sus resultados, así que basta con aparecer en google)
respuesta a Pablo
Por: Fernando Gómez
17/6/2011
Uno en .net puede hacer una web funcional sin javascript (creo que asi empieza el articulo). El problema es la experiencia de usuario, por ejemplo, cuando se ponen campos calculados a partir de la introducción de datos, en ese caso si se quiere que se haga de forma automática y sin ir al servidor, entonces hay que añadir javascript. Ya que asi realizamos los cambios en cliente sin que se vea un refresco.
Lo de que sea solo cosa de .net, no es cierto, mira la web de la comunidad de madrid, y veras que redirecciona a otra web accesible, y esa web no esta hecha con .net.
El tema buscador, no es lo mismo. Los buscadores utilizan una interfaz sencilla (una caja de texto y un botón) y en servido toda la logica de busquedas. No tiene nada que ver con esto, ya que de lo que habla el articulo es de dotar a una web de una gran experiencia de usuario, no de que funcione bien o mal una web.
Por ultimo darte las gracias por tu comentario, ya que creo que toda opinion es buena y aporta más a cada tema.
Un saludo

Manuales relacionados
Categorias relacionadas
El autor
Fernando Gómez Muñoz
Desarrollador web, especialista en ASP.Net y desarrollos con arquitectura SOA.
http://marferdotnet.blogspot.es
Últimas noticias
Donaciones
Si piensas que te hemos ayudado y merecemos tu apoyo económico...