javascript - you - Come sapere se il browser/scheda è attivo




you must enable javascript to view this page (4)

Possibile duplicato:
C'è un modo per rilevare se una finestra del browser non è attualmente attiva?

Ho una funzione che viene chiamata ogni secondo che voglio eseguire solo se la pagina corrente è in primo piano, cioè l'utente non ha minimizzato il browser o passato a un'altra scheda. Non serve a nulla se l'utente non lo sta guardando ed è potenzialmente ad alta intensità di CPU, quindi non voglio semplicemente sprecare cicli in background.

Qualcuno sa come dirlo in JavaScript?

Nota: io uso jQuery, quindi se la tua risposta lo usa, va bene :).


Oltre alla risposta di Richard Simões puoi anche utilizzare l' API di visibilità della pagina .

if (!document.hidden) {
    // do what you need
}

Questa specifica definisce un mezzo per gli sviluppatori di siti per determinare in modo programmatico lo stato di visibilità corrente della pagina al fine di sviluppare applicazioni web efficienti per la potenza e la CPU.

Per saperne di più

Esempio


Se stai tentando di fare qualcosa di simile alla pagina di ricerca di Google quando aperta in Chrome, (dove determinati eventi vengono attivati ​​quando ti concentri sulla pagina), l'evento hover () può essere d'aiuto.

$(window).hover(function() {
  // code here...
});

Usando jQuery:

$(function() {
    window.isActive = true;
    $(window).focus(function() { this.isActive = true; });
    $(window).blur(function() { this.isActive = false; });
    showIsActive();
});

function showIsActive()
{
    console.log(window.isActive)
    window.setTimeout("showIsActive()", 2000);
}

function doWork()
{
    if (window.isActive) { /* do CPU-intensive stuff */}
}

Vorrei provare a impostare un flag sugli eventi window.onfocus e window.onblur .

Il seguente snippet è stato testato su Firefox, Safari e Chrome, aprire la console e spostarsi tra le schede avanti e indietro:

var isActive;

window.onfocus = function () { 
  isActive = true; 
}; 

window.onblur = function () { 
  isActive = false; 
}; 

// test
setInterval(function () { 
  console.log(window.isActive ? 'active' : 'inactive'); 
}, 1000);

Provalo here .





jquery