Javascript / JQuery выполнять Javascript только на странице Фокус - PullRequest
2 голосов
/ 29 июня 2011

Возможно ли в javascript выполнять javascript только в том случае, если пользователь находится на текущей вкладке / странице?

Например, если он переключается на другую вкладку, тогда процесс javascript будет приостановлен, и когда он вернется на вкладкуJavaScript продолжит процесс.

1 Ответ

6 голосов
/ 29 июня 2011

Прямого пути не существует, если вы не используете специфичный для браузера код или код, который не является полностью стандартным (см. Ответ 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);
}
...