Прямого пути не существует, если вы не используете специфичный для браузера код или код, который не является полностью стандартным (см. Ответ katspaugh).
Решение «Стоп»
разработайте свой код так, чтобы он был «останавливаемым».Это то, что вы должны выяснить для своего контекста.
Затем добавьте что-то вроде следующего:
..
<html>
<head>
</head>
<body>
<script>
window.onblur = function() {
yourStopFunctionHere().
}
</script>
</body>
</html>
Решение 'Assert'
Вставьте следующий код, где действительно важно, чтобы окно имело фокус:
if(windowHasFocus()) {
//your code here
}
Существуют различные методы тестирования, если окно имеет фокус: JavaScript/ jQuery: проверить, имеет ли окно фокус
Асинхронное решение
whenWindowHasFocus(fn); //where fn is the function you want to only run when window has focus
Существует одна из двух возможных реализаций .....
Ожидание с помощью setTimeout
function WhenWindowHasFocus(yourFunction){
if(windowHasFocus()) {
yourFunction();
}
setTimeout(function(){ WhenWindowHasFocus(yourFunction); }, 1000);
}
Ожидание с помощью пользовательских событий
Или даже лучше, если вы можете заключить функциональность, зависящую от окна (функция, зависящую от окна, имеющего фокус), в отдельную функцию, а затем "перехватить""эта функция для window.onfocus.Будьте осторожны с этим, хотя.Вы не хотите полностью перезаписывать функцию window.onfocus
(или вы отменяете предыдущую работу, которую вы только что сделали).Вместо этого вам, возможно, придется использовать какие-то пользовательские события.Большинство фреймворков js предоставляют пользовательские события.Если вы пойдете по этому пути, функция window.onfocus
просто вызовет какое-то пользовательское событие, и вам не придется вручную писать какой-либо цикл кода с помощью setTimeout.
//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);
}