Malheureusement, il n'y a pas de solution précise à 100%.
onvisibilitychange
se déclenche correctement sur les changements d'onglet, mais pas sur les changements de fenêtre (ALT+TAB) l'événement visibilitychange n'est pas déclenché lors du changement de programme/fenêtre avec ALT+TAB ou en cliquant dans la barre des tâches
window.onfocus
se déclenche lorsque le document devient focalisé. Cela fonctionne comme prévu si le focus de l'onglet est déjà à l'intérieur de la page web, et se déclenche correctement lorsque le document devient focalisé. fenêtre o onglet se concentre.
Mais si vous avez le focus sur la barre d'URL, ou dans la console, vous êtes déjà "hors focus", et quand vous sortez de l'écran de l'ordinateur, c'est que vous n'avez pas le focus. fenêtre o onglet et de retour, vous resterez "hors champ", de sorte que cet événement ne se déclenchera pas tant que vous ne cliquerez pas dans la page ou que vous n'y naviguerez pas au moyen de la touche TAB.
Vous pouvez tester ci-dessous comment chaque événement se déclenche (cliquez à l'intérieur de l'iframe blanc pour tester les événements onfocus/onblur)
window.onfocus = () => console.log("focus");
window.onblur = () => console.log("out of focus");
document.onvisibilitychange = () => console.log("visibilityState: ", document.visibilityState);