3 Stimmen

Javascript/JQuery führt Javascript nur bei Seitenfokus aus

Ist es in Javascript möglich, Javascript nur auszuführen, wenn der Benutzer auf der aktuellen Registerkarte/Seite ist?

Wenn er z. B. zu einer anderen Registerkarte wechselt, wird der Javascript-Prozess angehalten, und wenn er zur Registerkarte zurückkehrt, setzt das Javascript den Prozess fort.

6voto

Alexander Bird Punkte 35885

Es gibt keinen direkten Weg, es sei denn, Sie verwenden browser-spezifischen Code oder Code, der nicht vollständig standardisiert ist (siehe die Antwort von katspaugh).

Stop"-Lösung

  • Ihren Code so gestalten, dass er "stoppbar" ist. Das ist etwas, das Sie für Ihren Kontext herausfinden müssen.

  • Fügen Sie dann etwas wie unten hinzu:

..

<html> 
<head> 
</head> 
<body> 
    <script> 
    window.onblur = function() {
        yourStopFunctionHere().
    }
    </script> 

</body> 
</html> 

'Assert'-Lösung

Fügen Sie den folgenden Code dort ein, wo es wirklich wichtig ist, dass das Fenster den Fokus hat:

if(windowHasFocus()) {
    //your code here
}

Es gibt verschiedene Methoden, um zu prüfen, ob das Fenster den Fokus hat: JavaScript / jQuery: Testen, ob das Fenster den Fokus hat

Asynchrone Lösung

whenWindowHasFocus(fn); //where fn is the function you want to only run when window has focus

Es gibt eine von zwei möglichen Umsetzungen.....

Warten über setTimeout

function WhenWindowHasFocus(yourFunction){
    if(windowHasFocus()) {
        yourFunction();
    }
    setTimeout(function(){ WhenWindowHasFocus(yourFunction); }, 1000);
}

Warten über benutzerdefinierte Ereignisse

Oder noch besser, wenn Sie die fensterfokusabhängige Funktionalität (die Funktionalität, die davon abhängt, dass das Fenster den Fokus hat) in eine separate Funktion verpacken können, und diese Funktion dann an window.onfocus "hängen". Seien Sie dabei allerdings vorsichtig. Sie wollen die Funktion window.onfocus nicht komplett überschreiben. window.onfocus Funktion (oder Sie machen die vorherige Arbeit rückgängig). Stattdessen müssen Sie möglicherweise benutzerdefinierte Ereignisse irgendeiner Art verwenden. Die meisten js-Frameworks bieten benutzerdefinierte Ereignisse. Wenn Sie diesen Weg gehen, wird die window.onfocus Funktion löst einfach ein benutzerdefiniertes Ereignis aus, und Sie müssen keinen manuellen Schleifencode mit setTimeout schreiben.

//The below is pseudo-code. custom events differ between js frameworks

window.onfocus = function(){
    window.FocusEvent.trigger()
}

function WhenWindowHasFocus(yourFunction){
    if(windowHasFocus()) {
        yourFunction();
    }
    window.focusEvent.addOnlyOnce(yourFunction);
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X