Nuestros exámenes no funcionaban bien y como hemos salido del problema


Fear - Miedo

Cada vez que se actualiza un programa es para echarse a temblar. Quede claro que las actualizaciones son necesarias por muchos motivos, entre ellos la puesta al día y la seguridad informática. Pero también ocurre de vez en cuando que algo deja de funcionar como funcionaba.

En CUVSI hemos creado código en Javascript que permite hacer exámenes online sin necesidad de registro. Todo lo hemos confiado a la sencillez y a la rapidez de carga. Funciona prácticamente con cualquier navegador, pero recomendábamos sólo dos, Chrome y Edge, porque los dos incorporan un plugin que permite guardar la página en pdf, por lo que de esta manera el usuario podía obtener sus certificados de aprovechamiento de los cursos, tras superar el examen online, sin necesidad de ninguna instalación.

Pues bien, tras la última instalación de Chrome, ya no funcionaba el código en este navegador. Sí seguían funcionando en los sistemas operativos Windows XP y Vista porque dejaron de recibir actualizaciones. La versión 49.0.2623.112 seguía funcionando.

Cuando se aciertan el 80 % o más de las preguntas de un examen de CUVSI, se abre un cuadro de diálogo en el que se pide los nombres y apellidos del examinando para emitir el certificado de aprovechamiento. Pues bien, en los navegadores Chrome actualizados (versiones 58.0.3029.110 (64-bit) o versión 59.0.3071.115 (Build oficial) (64 bits) no se abría el cuadro de diálogo, y al emitir el certificado en ventana emergente, en vez de el nombre y los apellidos, aparecía la palabra null. Tampoco aparecía el código de verificación del certificado de aprovechamiento, ya que este está asociado, entre otras cosas, a un nombre y apellido.

¿Qué estaba sucediendo? Mucho nos temíamos que era a causa de las actualizaciones.

Lo que hicimos fue crear un archivo en htm con el nombre de prueba que contuviera el cuadro de diálogo, para depurar el archivo javascript con Chrome.

Lo abrimos con Chrome, usando Más herramientas →  Herramientas para desarrolladores. Efectivamente el cuadro de diálogo no se abrió, dándonos el siguiente error:

Uncaught TypeError: Cannot read property 'length' of null at prueba.htm:48

prueba.htm:1 A window.prompt() dialog generated by this page was suppressed because this page is not the active tab of the front window. Please make sure your dialogs are triggered by user interactions to avoid this situation. https://www.chromestatus.com/feature/5637107137642496

Lo que traducido venía a decir que el cuadro de diálogo, originado por el código Javascript window.prompt se ha anulado esta página porque no es la pestaña activa de la ventana frontal y para evitar esta situación se podía activar el diálogo con una interacción de los usuarios.

Conclusión: no funcionaba en Chrome, pero el error no era nuestro. Ya existe interacción del usuario al realizar el examen y hacer clic en el botón de finalizarlo. Aparecía un enlace que daba más información, viniendo a decir que se anulaba window.prompt para no abrir un cuadro de diálogo en la parte delantera contra la voluntad del usuario. ¿En contra de la voluntad del usuario? Iniciar un un examen online, aceptar sus condiciones, y hacer clic en Finalizar examen, ¿es algo en contra de la voluntad del usuario?

Entonces nos dimos cuenta que, tal como nos temíamos, esto había cambiado por la actualización de Chrome.

A su vez aparecía otro enlace el proyecto OldSpice, del proyecto Chromium, que es un proyecto abierto. Esta vez contenía información detallada. Con todo lujo de detalles, en resumen venía a decir lo siguiente:

1.- Los diálogos de JavaScript window.alert (), window.confirm (), window.prompt () se introdujeron con la primera versión de JavaScript en Netscape Navigator 2 en 1995. Proporcionaron una interfaz de programación de aplicaciones (API) síncrona para mostrar cuadros de diálogo de aplicación., que no eran problemáticas al aplicarlo en un sólo proceso.

2.- Chromium es una aplicación multi-proceso, que permite a los usuarios abrir múltiples ventanas cada una con múltiples pestañas. Sin embargo, cuando cualquiera de las pestañas utiliza esas API para mostrar un cuadro de diálogo, dicho cuadro de diálogo hasta que no se interactúe con él bloquea todas las demás pestañas, se bloquea un número teóricamente ilimitado de pestañas no relacionadas. Esto es problemático por muchas razones.

3.- Esto permite que pestañas de fondo se traigan al frente y obliguen al usuario a interactuar con ellas a pesar de que el usuario no ha hecho nada para que esto suceda. Esto ha sido muy útil en sitios fraudulentos, especialmente las estafas de soporte técnico. Incluso sin abuso, evitar que los usuarios cambien de la página principal es algo hostil al usuario.

4.- Por tanto, va a existir un nuevo comportamiento para alerta / confirmación / solicitud. La pestañas se van a diferenciar en dos tipos:  la pestaña activa de la ventana frontal (la "pestaña principal") y todas las demás pestañas. Si una pestaña es la pestaña principal, aparece el cuadro de diálogo de la pestaña: Alerta / Confirmación / Diálogos, si el usuario realiza la interacción para la que están diseñados, entonces nada notable ocurriría. Sin embargo, si el usuario cambiaba a una pestaña diferente, moviendo la pestaña hacia el fondo y no haciéndolo por delante, se anula el diálogo. Para los diálogos de confirmación y aviso, se devuelve false y null respectivamente, indicando una cancelación. (Que son los mismos valores que actualmente aparecen para los diálogos que se suprimen con la configuración: Evitar que esta página cree diálogos adicionales)

5.- El verdadero problema surge porque una pestaña de fondo crea un cuadro de diálogo mediante alerta, convirtiéndose en la pestaña principal.

Mientras tanto, percibimos una bajada considerable del tráfico:

Bajada tráfico

¿Era causa del error? No parecía, ya que parecía la bajada se debía a tres causas:

1.- La llegada del verano: es bien sabido que cuando llega el buen tiempo la gente sale a la calle, de vacaciones, a la piscina, a la playa, al campo, en general al aire libre, y pasa menos tiempo enganchado a Internet.

2.- El fin del curso académico. En una web como la nuestra el contenido académico es una parte importante del contenido total, por lo que al finalizar el curso profesores, estudiantes y estudiosos salen al campo, a la playa, a pasear o tomar algo en una terraza, y se olvidan por un rato de libros, apuntes y aprender, que está bien descansar por un tiempo.

3.- Menos actividad en la web y en las redes sociales. Por una serie de circunstancias, en este tiempo dedicado menos tiempo a publicar nuevos contenidos y a mostrarlos en las redes sociales, y esto lógicamente influye en la cantidad de visitas.


¿Cómo solucionamos el problema?

Lo que nunca se debe hacer es actuar como si el problema no existiese, es decir, ignorándolo sin más. Además de no ser una buena práctica el ponerse de perfil, nuestros lectores y seguidores no merecen esto, pues esta web funciona gracias a ellos.

Lo primero fue poner un aviso visible en el sitio:


¡AVISO IMPORTANTE!

Las últimas versiones de Chrome están dando errores a la hora de hacer los exámenes online.

Se recomienda lo siguiente para quien se quiera examinar:

- Usar Edge como navegador

- Usar versiones no actualizadas de Chrome, como las de los sistemas operativos Windows XP y Windows Vista

Estamos trabajando para solucionar el problema y ofrecer alternativas.

¡Gracias por tu paciencia!


Y lo segundo, ponerse manos a la obra para solucionar el problema. Afortunadamente, la solución fue mucho más sencilla de lo que se esperaba. Aislamos el código problemático y empezamos a trabajar con él. Simplemente cambiando de orden una línea de javascript, el problema se había solucionado. Así de simple.

Nos pusimos del lado de nuestros usuarios y seguidores. No hay nada más frustrante que hagas un examen online, lo apruebes y luego no puedas obtener el certificado por un problema técnico.

Nos llevó algo de cambio cambiar veintitantos códigos, pero el problema se había solucionado. Pero no queríamos que volviera a ocurrir algo similar, por lo que abrimos la posibilidad de utilizar para el examen otros navegadores. Nos pusimos a trabajar en ello y es cierto que tenían sus limitaciones, pero usando varios se podía solventar el problema.

Seguimos recomendando los navegadores Chrome y Edge, ya que para obtener el certificado permiten guardar ventanas emergentes en formato pdf, sin necesidad de añadir complementos o extensiones. Pero también ahora está abierta la posibilidad de usar otros navegadores, instalando en este caso una impresora pdf, tipo doPDF, PDFCreator o PDFescape.

Instalando la impresora pdf, Firefox funciona correctamente con las indicaciones dadas, Explorer también ha respondido bien aunque si no se actúa rápidamente no deja ejecutar javascript, Safari nos ha dado algún problema en Windows para imprimir el certificado, y Opera no nos permite descargar la insignia digital.


Conclusiones

De toda experiencia se aprende, y a pesar de que este problema no fue por causa nuestra, hemos aprendido lo siguiente, aplicable a cualquier propietario de una web o webmaster:

1. No te dejes llevar por el pánico. Todo tiene solución.

2. Nunca debemos sacar conclusiones precipitadas. Una bajada del tráfico puede ocurrir por circunstancias distintas a las que suponemos.

3. No ocultes problemas a tus lectores y seguidores. No se lo merecen y son el motivo de tu sitio web.

4. Arregla el problema y si puedes mejora tu web.

5. Comparte lo que te ha pasado, ayudarás a otros que te lo agradecerán.

Espero que este artículo te hay servido si alguna vez te surge un problema en tu web. ¡Ánimo y a seguir adelante, siempre adelante!


SEO

0 comentarios:

Publicar un comentario