Détecter le changement de statut actif d'une page web avec JavaScript

Concept et utilisation

La fonction DomActiveChange() permet de détecter le changement de statut actif d'une page web.

Constructeur

DomActiveChange()

Retourne un object détecteur de changement du statut actif du document.

Syntaxe
new DomActiveChange();
Paramètre

Aucun.

Méthodes de l'instance
detecteur.addListener()

La méthode addListener() de l'interface DomActiveChange() ajoute un écouteur au détecteur de changement de statut du document.

Syntaxe
detecteur.addListener(ecouteur);
Paramètre
ecouteur(Function)

Le paramètre ecouteur de la méthode addListener() définit un écouteur de changement de statut du document, qui sera ajouté au détecteur.
Il s'agit d'une fonction de rappel, dont l'argument contiendra le statut actif du document sous forme d'une valeur booléenne.

detecteur.removeListener()

La méthode removeListener() de l'interface DomActiveChange() supprime un écouteur du détecteur de changement de statut du document.

Syntaxe
detecteur.removeListener(ecouteur);
Paramètre
ecouteur(Function)

Le paramètre ecouteur de la méthode removeListener() définit un écouteur de changement de statut du document qui sera supprimé du détecteur.

Exemple de détection du changement de statut du document

var detecteur = new DomActiveChange();

var ecouteur = function(statut) {
  if (statut === false) {
    console.log('Le document est devenu inactif.');
  } else {
    console.log('Le document est devenu actif.');
    
    detecteur.removeListener(ecouteur); // Supprime l'écouteur du détecteur
  }
}

detecteur.addListener(ecouteur); // Ajoute un écouteur au détecteur

Code source de la fonction

function DomActiveChange(){var w=window,d=document,_=this,a=[];_.addListener=function(l){
if(a.indexOf(l)===-1){a.push(l);}};_.removeListener=function(l){var i=a.indexOf(l);if(i>-1){
a.splice(i,1);}};var s=!1,v=d.visibilityState==='visible',f=d.hasFocus(),c=function(){
v=d.visibilityState==='visible';f=d.hasFocus();var b=v&&f?!0:!1;if(b!==s){s=b;
a.forEach(function(l){l(s);});}};w.addEventListener("pagehide",c);
w.addEventListener("pageshow",c);w.addEventListener('blur',c);w.addEventListener('focus',c);
d.addEventListener('visibilitychange',c);return _;}
^