moniteur de focus · démarrage

Détecteur de focus d'onglet — ce qu'une page enregistre quand vous partez

Vérification…

Lecture de ce que ce document rapporte sur sa propre visibilité et son focus.

Changez d'onglet, cliquez sur une autre fenêtre ou réduisez celle-ci — puis revenez.

Cette page exécute, dans votre propre navigateur, la même vérification de focus et de visibilité qu'une page de test en ligne ou de surveillance. Changez d'onglet, cliquez sur une autre fenêtre ou réduisez celle-ci, et observez précisément ce qui est enregistré. Rien n'est envoyé : chaque mesure ci-dessous reste dans cet onglet.

Journal des événements

Changez d'onglet, cliquez sur une autre fenêtre ou réduisez celle-ci — puis revenez.

Signaux

#HeureÉvénementÉtat enregistréAbsence
Rien pour l'instant. Passez à un autre onglet ou cliquez sur une autre fenêtre, puis revenez.

Ce que lit ce test

Tout navigateur expose deux mesures indépendantes. document.visibilityState indique si cet onglet est celui qui est affiché, et document.hasFocus() indique si ce document est celui qui reçoit les frappes clavier. Aucune ne demande d'autorisation, aucune ne peut être désactivée.

Ce ne sont pas les mêmes mesures. Passer à un autre onglet rend la page masquée. Cliquer sur une deuxième fenêtre du navigateur, une messagerie ou un terminal laisse cet onglet visible mais lui retire le focus : la page est sans focus, pas masquée.

Les plateformes d'évaluation enregistrent en général les deux, les comptent séparément et chronomètrent la durée de chaque absence. Le tableau ci-dessous montre exactement le relevé qu'elles constitueraient.

Ce qui le déclenche

  • Passer à un autre onglet — déclenche visibilitychange, l'état devient hidden. Enregistré partout, y compris sur téléphone.
  • Réduire la fenêtre, verrouiller l'écran ou laisser le téléphone se mettre en veille — compte aussi comme masqué.
  • Cliquer sur une autre fenêtre ou application — deuxième fenêtre du navigateur, éditeur, messagerie, barre de recherche ou lanceur. L'onglet reste visible ; c'est l'événement blur de la fenêtre qui se déclenche.
  • Ouvrir les outils de développement dans une fenêtre séparée — compte comme un changement de fenêtre, donc déclenche blur.
  • Gel ou libération de l'onglet par le navigateur pour économiser de la mémoire — déclenche freeze et pagehide sur Chromium.
  • Fermer ou recharger la page — déclenche pagehide, l'événement par lequel les plateformes clôturent une tentative inachevée.

Avant une évaluation en ligne

Si un test prévient que quitter la page est enregistré, mieux vaut savoir ce que cela signifie réellement avant de vous y mettre.

  1. Ouvrez cette page dans le navigateur que vous utiliserez réellement pour l'évaluation, et laissez-la ouverte.
  2. Passez à un autre onglet et revenez aussitôt. Notez que le journal inscrit un événement masqué et le nombre exact de secondes.
  3. Cliquez maintenant sur une autre fenêtre à la place — une messagerie ou un éditeur. Le journal affiche un événement blur, et l'onglet n'a jamais été masqué.
  4. Activez l'écran de blocage pour voir ce qu'une page d'évaluation affiche à l'instant où vous partez. Beaucoup de plateformes affichent exactement cela.
  5. Attention aux déclenchements involontaires : une bannière de notification, une fenêtre de gestionnaire de mots de passe ou un lanceur de raccourcis clavier seront enregistrés eux aussi.

Savoir ce qui est enregistré n'est pas la même chose que le contourner. Cette page vous dit quelle est la mesure ; la façon dont une plateforme l'interprète lui appartient.

Comment le verdict est établi

Focus actif — visibilityState vaut visible et hasFocus() vaut true. Cet onglet est à l'écran et reçoit vos frappes.

Sans focus — toujours visible, mais le focus est parti vers une autre fenêtre ou application. Vous regardez cet onglet tout en tapant ailleurs, ou une autre fenêtre le recouvre.

Masqué — l'onglet n'est pas dessiné du tout : un autre onglet est devant, la fenêtre est réduite, ou l'écran de l'appareil est éteint.

Le chronomètre d'absence démarre au premier événement qui retire le focus et s'arrête quand les deux mesures redeviennent vraies : un blur qui se transforme en changement d'onglet compte donc comme une seule absence continue.

Ce qu'il ne voit pas

Aucune de ces mesures ne dit où vous êtes allé. La page apprend que cet onglet a cessé d'être l'actif et pendant combien de temps — pas quel onglet, quelle application, ni ce qui était à l'écran.

Tout ce qui se passe hors du navigateur sans déplacer le focus clavier est invisible pour cette API, faute d'événement à déclencher. Cela inclut un second appareil physique, une feuille imprimée ou une autre personne dans la pièce.

Le compteur seul ne prouve rien. Une notification qui vole le focus, un panneau de lecteur d'écran, une invite de mise à jour du système et un changement d'onglet délibéré produisent le même événement.

Une surveillance sérieuse ne repose pas là-dessus seul. Caméra, micro, partage d'écran et navigateurs verrouillés installés voient bien plus qu'une page web — voyez le test de détection d'écran externe pour une autre mesure qu'une page peut prendre sans rien demander.

Confidentialité

La page est statique. Ni analytique, ni cookies, ni stockage local, et aucune requête réseau après le chargement.

Chaque compteur et chaque horodatage de cette page est calculé dans votre onglet et disparaît dès que vous le fermez. Recharger remet tout à zéro.

Vous pouvez tout lire : un seul fichier JavaScript, dont le lien figure en pied de page.

Compatibilité

visibilitychange et document.hasFocus() fonctionnent dans tous les navigateurs actuels, sur ordinateur comme sur mobile, sans autorisation et sans exigence d'origine sécurisée.

freeze et resume n'existent que sur Chromium et se déclenchent quand le navigateur suspend un onglet en arrière-plan pour économiser de la mémoire. Les autres navigateurs ne les signalent tout simplement jamais.

Sur iOS, changer d'application est signalé comme masqué et non comme perte de focus, car c'est tout le navigateur qui passe en arrière-plan. La distinction n'existe que là où il y a des fenêtres.

Questions fréquentes

Un site peut-il détecter que je change d'onglet ?

Oui, et sans la moindre autorisation. L'événement visibilitychange se déclenche à l'instant où votre onglet cesse d'être celui affiché, et document.visibilityState renvoie hidden jusqu'à votre retour. Tous les navigateurs actuels l'implémentent, y compris sur mobile. Aucun réglage ne permet de le masquer à une page.

Une évaluation en ligne distingue-t-elle un changement d'onglet d'une autre application ouverte ?

Oui. Changer d'onglet rend la page masquée ; cliquer sur une autre fenêtre ou application la laisse visible mais lui retire le focus clavier, ce qui déclenche un événement blur. Une plateforme qui enregistre les deux sait les distinguer, et cette page les affiche séparément pour que vous constatiez vous-même la différence.

Un test en ligne sait-il vers quel onglet ou quelle application je suis parti ?

Non. Le navigateur indique seulement à la page qu'elle n'est plus le document actif, et pendant combien de temps. La destination — un autre onglet, un autre programme, un écran verrouillé — n'est jamais exposée. Tout ce qui est plus détaillé exige un partage d'écran ou un navigateur verrouillé installé, tous deux visibles et soumis à votre accord.

Prendre une capture d'écran compte-t-il comme quitter la page ?

Cela dépend entièrement de la manière dont la capture est prise. Un raccourci géré par le système d'exploitation sans interface propre ne déclenche rien, car le navigateur ne perd jamais le focus. En revanche, tout ce qui ouvre un sélecteur, un panneau ou une fenêtre d'aperçu prend le focus, et cela s'enregistre comme un blur. Essayez les deux sur cette page et regardez le journal.

Pourquoi mon compteur a-t-il augmenté alors que je n'ai pas changé d'onglet ?

Le focus est volé par bien plus de choses qu'on ne le croit : bannières de notification, fenêtres de gestionnaire de mots de passe, invite de mise à jour du système, lanceur de raccourcis clavier, ou outils de développement ouverts dans leur propre fenêtre. Tous déclenchent un blur impossible à distinguer d'un changement volontaire.

Peut-on désactiver cette détection dans les réglages du navigateur ?

Non. La Page Visibility API fait partie du document lui-même, ce n'est pas une autorisation : il n'y a donc rien à révoquer. La bloquer casserait des usages légitimes comme mettre une vidéo en pause, arrêter les animations et suspendre les minuteurs dans les onglets en arrière-plan.

Un second écran empêche-t-il l'enregistrement des changements d'onglet ?

Non. Déplacer le regard vers un second écran ne change rien, mais cliquer sur une fenêtre de cet écran retire le focus clavier à celui-ci et déclenche un blur exactement comme sur un écran unique. Savoir si le second écran lui-même est visible pour une page est une autre question, traitée par le test de détection d'écran externe.

Quelque chose est-il envoyé à un serveur ?

Non. La page est statique, sans analytique ni cookies, et n'effectue aucune requête réseau après son chargement. Chaque événement et chaque minuteur affiché est calculé dans votre onglet et supprimé à sa fermeture.