monitor de foco · iniciando

Detector de foco de pestaña — qué registra una página cuando te vas

Comprobando…

Leyendo lo que este documento informa sobre su propia visibilidad y su foco.

Cambia de pestaña, haz clic en otra ventana o minimiza esta, y vuelve.

Esta página ejecuta, en tu propio navegador, la misma comprobación de foco y visibilidad que hace una prueba online o una página de supervisión. Cambia de pestaña, haz clic en otra ventana o minimiza esta y observa exactamente qué queda registrado. No se sube nada: cada dato de abajo se queda en esta pestaña.

Registro de eventos

Cambia de pestaña, haz clic en otra ventana o minimiza esta, y vuelve.

Señales

#HoraEventoEstado registradoAusencia
Todavía nada. Cambia a otra pestaña o haz clic en otra ventana y vuelve.

Qué lee este test

Todos los navegadores exponen dos lecturas independientes. document.visibilityState indica si esta pestaña es la que se está mostrando, y document.hasFocus() indica si este documento es el que recibe las pulsaciones de teclado. Ninguna necesita permiso y ninguna se puede desactivar.

No son la misma lectura. Cambiar a otra pestaña deja la página oculta. Hacer clic en una segunda ventana del navegador, en una aplicación de mensajería o en un terminal deja esta pestaña visible pero le quita el foco: la página queda sin foco, no oculta.

Las plataformas de evaluación suelen registrar ambas, contarlas por separado y cronometrar cuánto duró cada ausencia. La tabla de abajo muestra exactamente el historial que construirían.

Qué lo dispara

  • Cambiar a otra pestaña: dispara visibilitychange y el estado pasa a oculto. Se registra en todas partes, también en el móvil.
  • Minimizar la ventana, bloquear la pantalla o que el teléfono se suspenda: también cuenta como oculto.
  • Hacer clic en otra ventana o aplicación: una segunda ventana del navegador, un editor, una app de mensajería o un lanzador. La pestaña sigue visible; lo que se dispara es el evento blur de la ventana.
  • Abrir las herramientas de desarrollo en una ventana aparte: cuenta como cambio de ventana, así que dispara blur.
  • Que el navegador descarte o congele la pestaña para ahorrar memoria: dispara freeze y pagehide en Chromium.
  • Cerrar o recargar la página: dispara pagehide, el evento con el que las plataformas cierran un intento sin terminar.

Antes de una prueba online

Si un examen te avisa de que salir de la página queda registrado, conviene saber qué significa eso realmente antes de sentarte a hacerlo.

  1. Abre esta página en el navegador que vayas a usar de verdad para la prueba y déjala abierta.
  2. Cambia a otra pestaña y vuelve enseguida. Fíjate en que el registro anota un evento «oculto» y el número exacto de segundos.
  3. Ahora haz clic en otra ventana en lugar de cambiar de pestaña: el registro muestra un evento «blur» y la pestaña nunca estuvo oculta.
  4. Activa la pantalla de bloqueo para ver qué muestra una página de examen en cuanto te vas. Muchas plataformas enseñan exactamente esto.
  5. Cuidado con los accidentales: una notificación, una ventana emergente del gestor de contraseñas o un lanzador de atajos también quedan registrados.

Saber qué se registra no es lo mismo que burlarlo. Esta página te dice cuál es la lectura; cómo la interpreta cada plataforma es cosa suya.

Cómo se decide el resultado

Con foco: visibilityState es visible y hasFocus() es verdadero. Esta pestaña está en pantalla y recibe tus pulsaciones.

Sin foco: sigue visible, pero el foco se ha ido a otra ventana o aplicación. Estás mirando esta pestaña mientras escribes en otra cosa, o hay otra ventana encima.

Oculta: la pestaña no se está dibujando: hay otra delante, la ventana está minimizada o la pantalla del dispositivo está apagada.

El cronómetro de ausencia arranca con el primer evento que quita el foco y se para cuando ambas lecturas vuelven a ser verdaderas, así que un blur que acaba en cambio de pestaña cuenta como una única ausencia continua.

Qué no puede ver

Ninguna de estas lecturas dice adónde fuiste. La página se entera de que esta pestaña dejó de ser la activa y de cuánto tiempo, no de qué pestaña, qué aplicación ni qué había en pantalla.

Todo lo que ocurra fuera del navegador sin mover el foco del teclado es invisible para esta API, porque no hay ningún evento que disparar. Eso incluye un segundo dispositivo físico, una hoja impresa u otra persona en la habitación.

El contador por sí solo no demuestra nada. Una notificación que roba el foco, un panel de lector de pantalla, un aviso de actualización del sistema y un cambio de pestaña deliberado producen el mismo evento.

La supervisión seria no se apoya solo en esto. La cámara, el micrófono, la pantalla compartida y los navegadores bloqueados que se instalan ven mucho más que una página web: mira el test de detección de monitor externo para otra lectura que una página puede hacer sin pedir permiso.

Privacidad

La página es estática. No tiene analítica, ni cookies, ni almacenamiento local, y no hace ninguna petición de red después de cargarse.

Cada contador y cada marca de tiempo se calculan dentro de tu pestaña y desaparecen en cuanto la cierras. Recargar lo reinicia todo.

Puedes leerlo entero: es un único archivo de JavaScript, enlazado desde el pie de página.

Compatibilidad

visibilitychange y document.hasFocus() funcionan en todos los navegadores actuales, de escritorio y móviles, sin permiso y sin necesidad de origen seguro.

freeze y resume son exclusivos de Chromium y se disparan cuando el navegador suspende una pestaña en segundo plano para ahorrar memoria. Los demás navegadores simplemente no los notifican.

En iOS, cambiar de aplicación se registra como oculto y no como pérdida de foco, porque se manda a segundo plano todo el navegador. La distinción entre ambos solo existe donde hay ventanas.

Preguntas frecuentes

¿Puede una web detectar cuándo cambio de pestaña?

Sí, y no necesita ningún permiso. El evento visibilitychange se dispara en el instante en que tu pestaña deja de ser la visible, y document.visibilityState devuelve hidden hasta que vuelves. Todos los navegadores actuales lo implementan, incluidos los móviles. No hay ningún ajuste que se lo oculte a la página.

¿Distingue una prueba online entre cambiar de pestaña y abrir otra aplicación?

Sí. Cambiar de pestaña deja la página oculta; hacer clic en otra ventana o aplicación la deja visible pero le quita el foco del teclado, lo que dispara un evento blur. Una plataforma que registre ambos puede diferenciarlos, y esta página los muestra por separado para que veas tú mismo la diferencia.

¿Sabe un examen online a qué pestaña o aplicación cambié?

No. El navegador solo le dice a la página que ha dejado de ser el documento activo y cuánto ha durado. El destino —otra pestaña, otro programa, la pantalla bloqueada— nunca se expone. Cualquier cosa más detallada exige compartir pantalla o un navegador bloqueado instalado, y ambos son visibles y hay que aprobarlos.

¿Hacer una captura de pantalla cuenta como salir de la página?

Depende por completo de cómo se haga. Un atajo que gestiona el sistema operativo sin interfaz propia no dispara nada, porque el navegador nunca pierde el foco. Cualquier cosa que abra un selector, un panel o una ventana de vista previa sí toma el foco, y eso queda registrado como blur. Prueba las dos formas en esta página y mira el registro.

¿Por qué sube el contador si no he cambiado de pestaña?

El foco lo roban más cosas de las que la gente espera: banners de notificación, ventanas del gestor de contraseñas, un aviso de actualización del sistema, un lanzador de atajos de teclado o las herramientas de desarrollo abiertas en su propia ventana. Todas disparan un blur indistinguible de un cambio deliberado.

¿Se puede desactivar esta detección en el navegador?

No. La Page Visibility API forma parte del propio documento, no es un permiso, así que no hay nada que revocar. Bloquearla rompería usos legítimos como pausar el vídeo, detener animaciones y parar temporizadores en pestañas en segundo plano.

¿Un segundo monitor evita que se registre el cambio de pestaña?

No. Mover los ojos a otra pantalla no cambia nada, pero hacer clic en una ventana de esa pantalla le quita el foco de teclado a esta y dispara un blur igual que en una sola pantalla. Si la segunda pantalla es visible o no para una página web es otra cuestión, que cubre el test de detección de monitor externo.

¿Se envía algo a un servidor?

No. La página es estática, no tiene analítica ni cookies y no hace ninguna petición de red después de cargarse. Cada evento y cada temporizador se calculan dentro de tu pestaña y se descartan al cerrarla.