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);
}